私はJavaでカスタムメッセージサーバーを構築しました。これはメッセージのストリームを受け取り、各メッセージをクライアントに配信します(接続されていない場合は1:1メッセージをドロップします。 Win7x64 & Java 7でTomcat 7を実行していて、NIOコネクタを使用しています(Cometサーブレットを実装しています)。 それは素晴らしいですが、私は今、その獣をスケーリングしようとしており、現在接続されているクライアントごとに約85kbのRAMが割り当てられています。 10.000クライアント@ 900MB、リニアスケーリング(私はまだ何もしていませんが、まだコネクションを持っていません)それは私の意見ではかなり多いので、TomcatやJavaにNIO implでより多くのメモリを節約するための調整があるかどうか疑問に思っています。私がこれまでに試したTomcatの設定は、これにまったく影響しませんでした。Tomcatの「接続ごとの」メモリフットプリントを最小限にする
誰かがJavaやTomcatをソケット接続に関するメモリダイエットにどのように配慮した経験がありますか?
更新: ソケットバッファと他のいくつかのTomcat内部をトリミングすることで、70kb/connection以下になりました。これがスループットにどのように影響するかは不明です。私は32ビット/ 64ビットLinuxでも同じ結果を試しました。
どのようにクライアントあたり85kbを測定しましたか? – dash1e
小さな負荷テストを行い、10.000のクライアントを接続しました。サーバーコードでは、100クライアントごとにSystem.gc()を実行し、Runtime.totalMemory() - Runtime.freeMemory()をコンソールに出力しました。 – Daniel
こんにちは。あなたは最高のTomcat/JVM設定を共有できますか?また、NIOコネクタを使用しましたか? 10倍 – JRun