同時クライアントのバグの修復と2のパフォーマンスを最適化

A、BufferedReaderのは、データの読み取り

あなたが空になることがあり、強制終了した場合、データがSTRを使用して読み込まれたとき、NULLポインタ例外を報告することがあります

str = bufferedReader.readLine()

あなたは裁判官を追加する必要があります

  if(str == null||Foo.COMMAND_EXIT.equalsIgnoreCase(str)){
                break;
            }

 

II。

メモリー上昇

CPU時間消費統計

最も時間がかかるが、書き込み、のreadLineとのprintlnです。

二つの主IO出力、すなわちのSystem.outやSystem.in IO出力。インタフェースの両端には、これら二つのことを消費し、かつコンソール入力情報出力コンソールからデータを読み出す含まれます。それはメインスレッド、わずかにより割り当てられたCPU時間にメインスレッドの間であるため、データはコンソールから読み出される理由は、前面に排出されます。しかし、全体的なパフォーマンスへの影響、出力に大きく影響画面に出力列が回収されるべきではないので、すなわち、GC及びGC情報が遅延GCで、その結果、画面上に落下しない、それは他につながりスレッドが待っています。

データは、コンソールをクリアするときは、スレッドがいくつかの時間のために正常に戻った見つけることができます。

メモリがあります

また、これは、コンソールの出力情報は、パフォーマンスに影響します示しています。

したがって、次のコードが除去されるのSystem.out

 

200台のクライアントを接続する場合に、サーバは、199回転送される1.5秒以内に完了し、20以上200 * 199 / 1.5 = 26533接続、メモリ、秒当たりに発生したジッタであるが、CPUについて、しかし一般的に安定した状態となります。したがって、20,000人以上の比較的健康な状態でのデータ伝送は、現在、1秒に予定されています。

緑の中のスレッドのスケジューリングは、通常の動作状態を示しています

ピンクとオレンジが待っていると、アイドルの状態を示します。

ビューのスレッドのスケジューリングの点からも正常です。

 

公開された174元の記事 ウォンの賞賛115 ビュー830 000 +

おすすめ

転載: blog.csdn.net/nicolelili1/article/details/105132976