0

実稼働環境にデプロイされたアプリケーションがあり、OutOfMemoryメモリ リークが原因で例外がスローされることがあります。visualvm、jconsoleなどをリモートで接続したくないヘッドレスubuntuボックスで実行しています。do gcを作成する方法はありjvmますか(ボタンをクリックするだけのvisualvmのように)。

jmap -histo:live <pid>この gc コマンドを代わりに実行して、どのオブジェクトが gc を生き残っているかを調べたいと思います。増加しているオブジェクト数など。現在、予期しないオブジェクト数がいくつか見られますが、多くのドメイン オブジェクトで発生しているため、遅延 gc なのかメモリ リークなのかわかりません。

要するに、jvmpidに対して実行してgcを実行するLinuxコマンドを探しています。system.gc ではありません。

4

2 に答える 2

2

ヒープがいっぱいになると、GCは参照されていないオブジェクトを積極的にクリーンアップしようとします。したがって、「遅延gc」ではありません。あなたは正しい方向に進んでいると思います。jmapを使用してヒープダ​​ンプを取得してください。次に、それを分析して、生き残っているはずのないアプリケーションオブジェクトを確認します。いくつかのヒープダンプを取得して、それらを相互に比較する必要がある場合があります。

于 2012-06-12T18:23:30.330 に答える
0

Java で実際にメモリ リークが発生するのは非常に困難です。メモリ不足エラーが発生している場合は、実際にメモリが不足していることを意味している可能性が最も高いです。したがって、これを修正するには、未使用のオブジェクトへの参照を見つけて手動でクリーンアップする必要があります。そうしないと、ガベージ コレクターが無駄なメモリを解放できないためです。

JVM がこれ以上メモリを割り当てることができない場合、ガベージ コレクタが自動的に実行されます。

于 2012-06-12T16:28:25.690 に答える