POEで作ったサーバーの遅いところを調べた

DB周りで止まってるのかと思ったら全然違って、切断検出用のPING受信が殆どの時間を食っていた。(クライアントが30秒に一回PINGを送ってくる)
当然一個あたりの時間はクソなんだけど、なにしろ数が多い。1000人いて30秒に一回PINGが飛んでくるとしたら、0.03秒に一回、つまり1秒に30回以上受信してる計算になる。
なので、数の少ないinsertするコマンドより何もしないpingの方がトータルで時間を食っていた。
これは予想外すぎる・・・ping止めるわけにはいかんし、他の人はどうしてるんだろ。
調べてみないと分からないもんだ。とりあえずpingの場合だけはXMLのコマンドのパースをせずに、完全一致で検出して即終了にすることで3割以上は高速化できた。(これで3割しか減らないってXMLパーサー速いな)


ただ、PINGが来たときのClientInputの一回の処理の平均時間は約0.003秒で、これが秒間100回来たところで0.3秒にしかならず、1秒の半分にもならない。でもCPUを1コア丸々使ってる。
ってことは、ClientInputの中でPINGが大きくても、それ自体やPOE::Component::Server::TCPの全体より、socketのpollingとかPOE自体の負荷の方が大きいのかもしれない・・・
今度更に突っ込んで調査しよう。