私たちのC/Sベースのオンラインゲームプロジェクトでは、TCPをネットワーク伝送に使用しています。 Libeventを含めると、ネットワークI/Oで自動的に処理するための接続ごとにbuffereventを使用します。ネットワークがビジー状態になると非常に待ち時間が長くなる、TCP、libevent
これは以前はうまくいきましたが、最近遅れの問題が表面に現れています。ネットワークをもっと忙しくするためにいくつかのストレステストを行うと、待ち時間は非常に長くなり、数秒かそれ以上になります。サーバは混乱状態に沈む:
平均CPU使用率が減少し- (0%-60%-0%-60%リピート、待っている何か?)ネットトラフィックが(nethogs)
- を減少
- 何かが魔法のようにすべてのシステムを遅くしますが、サーバーへの新しい接続が時間内に終了答えたように、まだ生きているサーバに接続されたクライアント(netstatの& tcpdumpの)
は、それは見えます。
プロトコルをUDPに変更したとき、同じ状況で正常に動作します。明らかな遅延はなく、システムは高速に動作します。純交通量は約3M/Sです。
プロジェクトはイントラネット上で実行されています。私はまた、最大ダウンロード速度、ほぼ18M/Sをテストしました。
私はLibeventのヘッダファイルと文書の一部を研究し、すべての接続にレート制限を設定しようとしました。いくつかの改良を加えましたが、いくつかの異なる構成を試みても問題は完全に解決されませんでした。私のパラメータは次のとおりです:read_rate 163840、read_burst 163840、write_rate 163840、write_burst 163840、tick_len 500ms。
ありがとうございました!
私は本当にあなたの助けに感謝しています、ありがとうございます! wireshark経由でネットワークキャプチャを取得するために私はあなたの助言に従った。私は、クライアントからサーバーへの重複ACK、サーバーからクライアントへの27の再送信を含む、180秒間に合計312788フレームを取得しました。 IOグラフも、ほとんど94KB/Sであり、一定の時間間隔で突然4040〜5586KB/Sに急激に増加します。平均時間間隔は約7秒ですが、時間の経過とともに間隔が長くなったり長くなったりします。言い換えれば、IOグラフの矛盾が増しています。 – walter
@walterよろしくお願いします。あなたがどこかにキャプチャを置くことができれば、私はそれを得ることができます、私は見てみたいです。ネットワークキャプチャから何が起こっているのかを把握できることは、デバッガを使いこなすのと同じような、本当のスキルです。しかし、それは投資に値する非常に貴重なスキルになる可能性があります。 –
あなたのメールアドレスをお知らせください。あなたが簡単に入手できるクラウドサービスにファイルをアップロードするのはちょっと難しいです。ここで外国のウェブサイトを閲覧する速度は非常に遅いです。 – walter