諸悪の根源sleepが入っているrefreshLoopを確認してsleepを根絶できないか調べてみます。refresh」の3箇所からです。getWebIfRefresh」については、Commetを無効にするとサーバー上で2秒も待ってしまうことになります。むせる鯖のようにwebIfを無効にしちゃえば呼ばれることはなくなりますが、どろいどんとふとかスマホ用chat.htmlとか影響が大きすぎるのでWebIfは無効にはできません。次は、この処理のsleepを丸ごと削っちゃっていいのかどうか挙動を追ってみます。むせる鯖の中の人であるくまかば氏によると大丈夫らしいのですが、一応確認しておきましょう。sleepをコメントアウトすると$refreshTimeoutで設定している間(公式鯖では1秒)は、saveDataが空になるまで全速力でrefreshOnceを呼ぶことになります。refreshOnceの中身は、saveData.merge!。ハッシュをマージしているだけですね。ハッシュをマージしてsaveDataが空になればループを抜けるので全速力になっても負荷が高くなる理由はないですし、コメントアウトしても問題なさそうです。いうわけでコードを変更したのはこの一カ所(sleepのコメントアウト)だけでcommet方式も無効にしました。endというわけで、今回のチューニングは、今まではやらなかったどどんとふ本体のコードにも手をつけてしまいました。結果がどうなったかというと、こうなりました。(見やすくするためにグラフのスケールが近くなるようにリサイズしています)ログイン人数が620人の状態で、nginxの処理能力が400req/sec以上を叩き出していますし、今まで1鯖あたり100人を超えたあたりから部屋一覧の表示がもっさりするようになっていたのが、150人を超えても一瞬で表示されています。クライアントからのリクエスト数も増えていないことから、負荷チューニングとしては成功したと思います。公式鯖は今までどどんとふ本体には手を入れないという基本的ポリシーでしたが、ついに手を出しちゃいました。いえ、公式鯖用にForkなんてもってのほかなので、この記事を@torgtaitai氏が見つけてどどんとふ本体にマージされることを生温かく待つことにします。09:41sleepのコメントアウトについてなんですが、少なくともv1.48.07では1742〜1746行目で$isCommetがfalseのときにはrefreshLoopを呼び出さずrefreshOnceを呼び出すようになっているため、関係ないのかもしれません。21:09記事に書いてあるとおり、refreshはisCommetがfalseだとrefreshOnceしか呼ばないのですが、getWebIfChatTextFromTimeと、getWebIfRefreshからは、Commetの判定を行わずにrefreshLoopを呼んでいませんか?コメントは受け付けていません。