memcached 显然正在重置连接

更新:


它不是 memcached,它有很多 TIME_WAIT 状态的套接字:


% ss -s

Total: 2494 (kernel 2784)

TCP:   43323 (estab 2314, closed 40983, orphaned 0, synrecv 0, timewait 40982/0), ports 16756

顺便说一句,我已经修改了以前的版本(如下)以使用 Brad Fitz 的 memcache 客户端并重用相同的 memcache 连接:


http://dpaste.com/1387307/


旧版本:


我已经将 Go 中最基本的 Web 服务器放在一起,它的处理程序函数只做一件事:


从 memcached 中检索密钥

将其作为 http 响应发送给客户端

这是代码:http : //dpaste.com/1386559/


问题是我在 memcached 上收到了很多连接重置:


2013/09/18 20:20:11 http: panic serving [::1]:19990: dial tcp 127.0.0.1:11211: connection reset by peer

goroutine 20995 [running]:

net/http.func·007()

        /usr/local/go/src/pkg/net/http/server.go:1022 +0xac

main.maybe_panic(0xc200d2e570, 0xc2014ebd80)

        /root/go/src/http_server.go:19 +0x4d

main.get_memc_val(0x615200, 0x7, 0x60b5c0, 0x6, 0x42ee58, ...)

        /root/go/src/http_server.go:25 +0x64

main.func·001(0xc200149b40, 0xc2017b3380, 0xc201888b60)

        /root/go/src/http_server.go:41 +0x35

net/http.HandlerFunc.ServeHTTP(0x65e950, 0xc200149b40, 0xc2017b3380, 0xc201888b60)

        /usr/local/go/src/pkg/net/http/server.go:1149 +0x3e

net/http.serverHandler.ServeHTTP(0xc200095410, 0xc200149b40, 0xc2017b3380, 0xc201888b60)

        /usr/local/go/src/pkg/net/http/server.go:1517 +0x16c

net/http.(*conn).serve(0xc201b9b2d0)

        /usr/local/go/src/pkg/net/http/server.go:1096 +0x765

created by net/http.(*Server).Serve

        /usr/local/go/src/pkg/net/http/server.go:1564 +0x266

我已经小心地设置 Linux 内核网络,以免妨碍(关闭 SYN 泛洪保护等)。


...... 然而在使用“ab”(下面)进行测试时,我遇到了这些错误。


ab -c 1000 -n 50000 "http://localhost:8000/"

我在任何地方都没有任何迹象表明它是内核(dmesg、/var/log)。


慕容708150
浏览 247回答 2
2回答

互换的青春

从 YBC 库尝试memcache 客户端。与gomemcache不同,它只打开和重用一些与 memcache 服务器的连接,而不管通过客户端发出的并发请求的数量。它通过将并发请求通过少量打开的连接传输到内存缓存服务器来实现高性能。可以通过ClientConfig.ConnectionsCount配置到内存缓存服务器的连接数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go