yrmcds
yrmcds copied to clipboard
don't stop accept: Too many open files
file descriptor の最大値を指定している環境で yrmcdsを動かして, その yrmcds に対してベンチマークを取っていたときに, accept: Too many open files
が止まらなくなりました.
ベンチマーク用のプログラムを止めても出続けました.
そのとき CPU 1個ぶんが 100%になっていたのと、 strace をかけたときに accept4() が連続して出力されたことから, この 箇所 で無限ループしているのではないかと思いました。
Design Notes によれば, reactor が socket closeを担うそうなので, reactor で on_readable() を呼び出し, その内部でループしてしまうと, reactorによる file descriptorの解放ができないので, on_readable() 内部のループから抜け出せないのではないかと推測しました(正しいかどうかまでは確認していません).
ありがとうございます。はい、ご指摘の挙動になると思います。 よろしければ再現可能なベンチマークプログラムをいただけないでしょうか。
お待たせして申し訳ありません.
ベンチマークプログラムは twemperf(mcperf) になります. こちらでテストしたときの情報は gist に置いておきました.
次のパターンで accept: Too many open files
が出続けています.
Max open files (soft/hard) | yrmcds.conf max_connections |
---|---|
4096 / 4096 | 10000 |
1024 / 4096 | 1000 |
We solved this by settings higher limits. Is that actually something that should be solved by yrmcds
itself?