1

MINAクライアントについて少し問題があります。

サーバーへの接続を1つだけ作成すると、サーバーは1秒ごとに定期的に何らかのデータを送信します。

つまり、クライアントはサーバーに接続します。サーバーは文字列をクライアントに送り返し、これらのすべてのステップは同じ開いた接続(同じクライアントオブジェクトとクライアントハンドラー)を使用します。

しかし、問題は、古いデータがGCによって収集されていないことだと思います。使用されるヒープは数秒で大きくなり、減少することはありません。messageReceivedメソッドが空です!

public void messageReceived(IoSession session, Object message) { }

何か案が ?

4

2 に答える 2

1

VisualVM自体が大量のガベージを引き起こします。空のアプリケーションを起動してスレッドをスリープ状態にし、VisualVM を有効にしてガベージの収集が開始されるのを監視できます。コードなし。

ただし、ミナが保持していないが、ガベージコレクションされない長期実行アイテムを生成するという同様の問題が発生しています (フル GC を実行しない限り)。この問題により、実メモリが 4 MB のアプリケーションが 1 時間で 80 MB として表示される場合があります。収集されることはありません。

このような再起動なしではサーバーを長期間オンラインに保つことができなかったため、NIO をラップする独自のフレームワークを構築しようとしています。

于 2013-01-08T07:32:35.607 に答える
0

減少しない場合は、有効にする-XX:+HeapDumpOnOutOfMemoryErrorと、メモリ不足エラーでヒープ ダンプが取得されます。

使用されるメモリの量は重要ではなく、完全な GC の後にどれだけ保持されるかだけが重要です。VisualVM を実行し、フル GC を定期的にトリガーして、その後の空き容量を確認することをお勧めします。

于 2012-12-05T10:16:57.153 に答える