4

多くの場合、IBM Websphere Application Server で OutOfMemoryException を見つけました。アプリケーションがデータベースから巨大なデータを取得するため、この例外が発生すると思います。そこで、すべてのクエリが 1000 レコードを超えるデータを取得しないように制限し、WAS の JVM を次のように設定します。

+ Verbose garbage collection
+ Maximum Heap size = 1024 (RAM on my server is 16 GB and now I already change to 8192)
+ Debug arguments = -Djava.compiler=NONE -Xdebug -Xnoagent  
                    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7777
+ Generic JVM arguments = -Dsun.rmi.dgc.server.gcInterval=60000 
                          -Dsun.rmi.dgc.client.gcInterval=60000 -Xdisableexplicitgc  
                          -Dws.log=E:\WebApp\log -Dws.log.level=debug
(ws.log and ws.log.level are my properties)

そして、プロファイルフォルダーに heapdump 、 javacore 、および snap ファイルを見つけまし問題原因について教えてくれると思いますが、heapdump、javacore、および snap ファイルの読み取り/使用方法がわかりません。

OutOfMemoryException を防止/回避/修正する方法を教えてください。ありがとう

4

6 に答える 6

3

ヒープ・ダンプ・ファイルを確認したい場合、IBM はそれらを分析するためのツールをここで提供しています。

于 2008-10-08T14:45:40.113 に答える
1

「Thanks for the memory」は、JVM によるメモリの使用に関する優れた記事であり、この問題の分析に役立つ可能性があります...

このリンクのbwalliserに感謝します

于 2009-05-19T08:12:56.273 に答える
1

これに対する答えは、OutOfMemoryException に関連付けられたメッセージによって異なります。-XX:MaxPermSize=... を試して、256m などの大きな値に設定することもできます。

また、どこかに再帰関数がある場合、スタック オーバーフローが発生している可能性があります。

可能であれば、例外に関連するメッセージを投稿してください。スタックトレースも役立つかもしれません。

于 2008-10-08T14:34:40.073 に答える
0

永続化プロバイダーとして hibernate/JPA を使用していると思いますか? 二次キャッシュを使用していますか? その場合、キャッシュから大きな結果セットを削除することを検討しましたか?

于 2008-10-09T15:10:17.630 に答える
0

OutOfMemoryError の種類がわからない場合、この質問に答えるのは困難です。permgenheapspace2 つの非常に異なる獣です。

私は何ヶ月も JBoss で perm-gen を追跡していましたが、その特定のタイプの問題は、Web アプリケーションをオンザフライでリロードするすべてのアプリケーション サーバーに一般的でした。サガはここに文書化されています。

あなたが持っているヒープダンプは... Eclipse MATで分析できる可能性があります。

于 2008-10-09T23:32:49.377 に答える
0

JProfiler などのツールを使用してデバッグできるように、ローカルで問題を再現してみてください。ローカルで OOM を強制できない場合でも、JProfiler でメモリが増加する可能性があります。次に、スナップショットを取り、ガベージ コレクションされていないクラスを探します。これは正確な科学ではありませんが、IBM のヒープダンプを調べるよりははるかに簡単です。ただし、必要に応じて、ヒープ ダンプを調べる古い方法は HeapRoots を使用していました。使用しているバージョンによって異なる場合があります。IBM JDK の一部のバージョンでは圧縮に問題があることを知っています。メモリが十分にある場合でも、十分な大きさのフラグメントが利用できないため、OOM を取得できます。

于 2008-10-08T17:13:52.140 に答える