lua-hiredisでcloseしているのにnetstatで確認するとTIME_WAITが大量発生していた件


lua-hiredisを使っていてcloseしているのにabで30000以上アクセスさせてみるとredisに接続出来なくなるということが発生しました。また、netstatで確認するとredisへのコネクションがTIME_WAITが大量に表示されていました。

広告
local redis = require('hiredis')
local conn = redis.connect('127.0.0.1', 6379)
 
local hoge_value = conn:command('GET', 'Hoge')
 
conn:close()

というような簡単なコードだったんですが、どうもうまくredisとのコネクションが切れていなかったので、lua-hiredisのclose処理を見てみるとredisのquitコマンドは発行していなかったので、試しに、closeの前にquitコマンドを発行してみることにしました。

local redis = require('hiredis')
local conn = redis.connect('127.0.0.1', 6379)
 
local hoge_value = conn:command('GET', 'Hoge')
 
conn:command('QUIT')
conn:close()

するとTIME_WAITが大量に発生することなく、abで大量にアクセスしてみてもredisへ接続出来なくなるという現象も発生せず安定するようになりました。

関連記事