2016-12-07 15 views
0

私は春のApache TomcatでWebアプリケーションを実行しています。私はJmeterストレステストでテストを行っていますが、ヒープは速く満たされ、ガベージコレクションされていません。ヒープダンプを解析すると、メモリリークの疑いがあるのはTaskQueueでしたが、私たちのコードではタスクを実行していません。
私の質問は、リクエストの処理中で、上記の設定を持つサーバーへの応答は、タスク関連のクラスを使用しています。メモリリークの容疑者がアプリケーションのApache TomcatとSpringフレームワークによるHTTPリクエストとレスポンスの流れ

One instance of "java.util.TaskQueue" loaded by "<system class loader>" occupies 680,207,896 (82.39%) bytes. The instance is referenced by org.apache.tomcat.util.threads.TaskThread @ 0xc1b52018 ajp-bio-8009-exec-243 , loaded by "java.net.URLClassLoader @ 0xce67a9b8". The memory is accumulated in one instance of "java.util.TimerTask[]" loaded by "<system class loader>" 
+0

アプリケーションのスループットが不十分なため、要求が多すぎました。 これは、GCがまったく機能しない理由の原因になる可能性があります。ストレステストのリクエスト数(またはサイズ)を揃えてください。 – dgregory

+0

こんにちはbroおかげで、私はjmeterを使用してヒットの数を減らしましたが、メモリが800 MBから縮小された600 MBレベルであっても、それでも一定のレベルではっきりしています。 – Sharan

+0

jmeterでシステムメトリックグラフをアップロードできますか?そして、あなたは強制的にGCを強制的にトリガしますか? – dgregory

答えて

0

私の場合をleaks.Inメモリ用のコードに見ていることを確認し、以下のようになり、いくつかのDAOクラスはシングルトンとして、そのクラスのコンストラクタで行われていなかった、私たちは何度も何度もデータベース接続を初期化し、私たちはいつもjmeterストレスヒットを作った。占有メモリは非常に大きかった。私はDAOクラスをシングルトンとして作ることでこの問題を解決した。

関連する問題