2011-12-22 6 views
1

私はJavaサーバアプリケーションを書いていますが、同時に3800-4000ネットワーク接続も受け付けており、CPU /ネットワーク負荷は低いです。 40%) しかし、古いものを殺すことでそれを受け入れるので、ライブ接続の数は約3800〜4000(数が変わります)です。サーバは新しい接続をリセットしますが、CPU /ネットワークの負荷は低いです

私のソフトウェア自体、OSの設定、CPU/NAT(40%未満の負荷がかかっているとは関係ありません)のボトルネックとなることはありますか?

CPU:4コア(一つのコアが50%、他の3ロードされている - 25%) 環境:アマゾンEC2は、Windows Server 2003 R2

編集: メモリ使用量が JREが500 MB未満であります32bit、1.6.0_30 MaxUserPortは65534に設定されています

+1

あなたのメモリ使用量を見ましたか? –

+0

どのJavaのバージョンですか? 32または64ビットアーキテクチャ? –

+0

メモリ使用量が500 Mb未満です。JREは32ビット、1.6.0_30 – Rage

答えて

0

私はあなたが勝利で4000の近隣にあるローカルダイナミックポートの数によって制限されていると思います*。 Win *レジストリには同時接続数を制限する多数のパラメータがあります。一覧はthis articleを参照してください。

+0

ですが、記事のおかげで、[HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ Tcpip \ Parameters]のMaxUserPortをデフォルトで5000に設定している場合は、サーバーを起動する前に65534他のパラメータを試しましたが、全体的な結果は変更されていません – Rage

+0

Java 1.6.0_30を使用していることにお気づきになりました。あなたはVisualVMを通してあなたのサーバーを見てみましたか?そこに興味深いものは何ですか? – mazaneicha

0

それは新しい接続

正しいを拒否。 TCPバックログキューがいっぱいになると、これ以上の接続は受け入れられません。 WindowsはRSTを発行し、他のプラットフォームは着信要求を無視します。最初のケースでは、クライアントは「接続が拒否されました」を取得し、2番目のケースではクライアントは「接続がタイムアウトしました」を取得します。

またはそれを受け入れる私はネットワーキングの20年以上のそれを見たことがない古いもの

を殺すこともできます。この結論に導いた症状は何ですか?

+0

私は自分のソフトウェアのストレステストをしています。クライアントマシンで複数のプロセスを実行しています。接続の総数が約3800で、新しいクライアントプロセスを実行すると、古いプロセスのスレッド数が減少します。だから私はサーバーの古い接続(killされたスレッドの数〜新しいプロセスで新たに作られたスレッドの数)をリセットすると結論づけました。うん、多分私はここで間違っていた。なぜなら、接続に関連するエラーは見られなかったからだ。 – Rage

+0

実際に私は '接続がリセットされました'、 '接続が拒否されました'ではありません。 – Rage

関連する問題