2

メモリ不足エラーをデバッグしようとしています。Jmap でヒープ ダンプを実行し、Eclipse Mat で結果を分析すると、次のように表示されます。

7,677 instances of "java.lang.Class", loaded by 
"<system class loader>" occupy 48,094,720 (23.99%) bytes. 

最大のインスタンス:

class blah.BlahService$$EnhancerByCGLIB$$4a0a7d43 @ 0x2aaab06d9668 
- 2,067,096 (1.03%) bytes. 

BlahService は @Service アノテーション付きのスプリング サービスです。すべてのサービス クラスは、春にはシングルトンです (Bean ごとに IOC ごとに 1 つ)。では、なぜこのクラスが最も疑わしいのでしょうか。

私も見る

One instance of "org.apache.jasper.servlet.JspServlet" loaded by 
"org.apache.catalina.loader.StandardClassLoader @ 0x2aaac17bc260" occupies 42,724,168 
(21.31%) bytes. The memory is accumulated in one instance of 
"java.util.concurrent.ConcurrentHashMap$Segment[]" loaded by "<system class loader>".

これは何を意味するのでしょうか?

4

3 に答える 3

1

通常、OutOfMemoryError は次の 2 つの問題のいずれかを示します。 1. アプリケーションのニーズに対してメモリが少なすぎる。次に、Xmx スタートアップ パラメーター 2 を使用してサーバーのヒープ サイズを増やす必要があります。または、アプリケーションまたはそれが使用するサード パーティ ライブラリの 1 つにメモリ リークがあります。メモリ リークを追跡することは、事前の経験がなければ簡単な作業ではありません。Plumbrをお勧めします。メモリリークを監視するための非常に使いやすく正確なツールです。

于 2012-10-04T10:28:35.877 に答える
0

私はJavaプロファイラーを使用しましたが、実際のパフォーマンス調整とメモリ使用量の出力に満足していません。現在、Javaメロディーに切り替えています。これは、開発者だけでなく本番システムでもパフォーマンスの最適化に役立ちます。Javaメロディーは、統合と構成が非常に簡単であり、本番環境では、web.xmlを更新するだけで有効または無効にできます。

于 2012-10-04T12:08:51.843 に答える
0

うん、それを修正するために何かをするのが遅すぎると、そのエラーが発生します.ヒープがいっぱいになると、JVMは何かをするためのオブジェクトを作成できないため、何もできません。 Springを使用している場合、Webシステムを実行していると思います。その場合、デプロイコマンドの最初にヒープスペースを増やし(「-Xms:256」のようなものです)、リソースの数を計画するだけですメモリがいっぱいになるとシステムが故障するのは事実なので、あなたのアプリが必要になります

于 2012-10-03T23:22:23.913 に答える