idle connections to memcached
RussianCatYakov opened this issue · 1 comments
RussianCatYakov commented
Hi,
I have the following code executed on each request:
access_by_lua_block {
local memcached = require "resty.memcached"
local memc = memcached:new()
memc:set_timeout(3000) -- 3 sec
local ok = memc:connect("127.0.0.1", 11211)
local myvar = memc:get(othervar)
### do something
local ok, err = memc:close()
}
put operation is happening in other internal location in case proxy origin receives 302 redirect
access_by_lua_block {
local memcached = require "resty.memcached"
local memc = memcached:new()
memc:set_timeout(1000) -- 1 sec
local ok = memc:connect("127.0.0.1", 11211)
### do something
local ok, err = memc:set(stringone, stringtwo, 604800)
local ok, err = memc:close()
}
Recently I noticed that connections are not really closed but stay idle for some time. And it's count is pretty high.
I have memcached running in docker contrainer like this
memcached -c 10000 -t 8
nginx itself handles 4k rps nonstop
And netstat shows this
netstat -an | grep 11211
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:62334 127.0.0.1:11211 TIME_WAIT
tcp 0 0 127.0.0.1:59430 127.0.0.1:11211 TIME_WAIT
tcp 0 0 127.0.0.1:61444 127.0.0.1:11211 TIME_WAIT
tcp 0 0 172.17.0.1:11638 172.17.0.2:11211 TIME_WAIT
tcp 0 0 127.0.0.1:45352 127.0.0.1:11211 TIME_WAIT
tcp 0 0 127.0.0.1:62010 127.0.0.1:11211 TIME_WAIT
tcp 0 0 127.0.0.1:56390 127.0.0.1:11211 TIME_WAIT
tcp 0 0 172.17.0.1:31884 172.17.0.2:11211 TIME_WAIT
tcp 0 0 172.17.0.1:64364 172.17.0.2:11211 TIME_WAIT
...
netstat -an | grep -c 11211
31836
lua module version is 0.16
Please help me solve this issue, thank you in advance.
zhuizhuhaomeng commented
please don't call memc:close() to close the connection after the put operation.
Instead, you should use memc:set_keepalive to reuse the connection.
local ok, err = memc:set_keepalive(10000, 100)
if not ok then
ngx.say("cannot set keepalive: ", err)
return
end