yrmcds icon indicating copy to clipboard operation
yrmcds copied to clipboard

don't stop accept: Too many open files

Open soara opened this issue 7 years ago • 3 comments

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() 内部のループから抜け出せないのではないかと推測しました(正しいかどうかまでは確認していません).

soara avatar Jun 11 '17 11:06 soara

ありがとうございます。はい、ご指摘の挙動になると思います。 よろしければ再現可能なベンチマークプログラムをいただけないでしょうか。

ymmt2005 avatar Jun 11 '17 12:06 ymmt2005

お待たせして申し訳ありません.

ベンチマークプログラムは twemperf(mcperf) になります. こちらでテストしたときの情報は gist に置いておきました.

次のパターンで accept: Too many open files が出続けています.

Max open files (soft/hard) yrmcds.conf max_connections
4096 / 4096 10000
1024 / 4096 1000

soara avatar Jun 12 '17 01:06 soara

We solved this by settings higher limits. Is that actually something that should be solved by yrmcds itself?

DerDanilo avatar Mar 23 '21 20:03 DerDanilo