ホームページ  >  記事  >  类库下载  >  java.lang.OutOfMemoryError エラー処理

java.lang.OutOfMemoryError エラー処理

高洛峰
高洛峰オリジナル
2016-10-09 09:01:491493ブラウズ

原因: 一般的な原因には次のようなものがあります。

1. データベースから一度に取得するデータが多すぎるなど、メモリにロードされるデータの量が多すぎる。

2. コレクション内にオブジェクトへの参照がある。使用後にクリアされないため、JVM がリサイクルできなくなります

3. コード内に無限ループがあるか、サードパーティ ソフトウェアで重複したオブジェクト エンティティが生成されます。使用済み;

5. 起動パラメータのメモリ値が小さすぎます。一般的なエラー プロンプト: 1.tomcat:java.lang.OutOfMemoryError: PermGen space

2.tomcat:java.lang.OutOfMemoryError: Java heap space

3.weblogic:ServletException java.lang.OutOfMemoryError の根本原因

4.resin:java.lang.OutOfMemoryError

5.java:java.lang.OutOfMemoryError

解決策 1. アプリケーションの解決策サーバー プロンプト エラー: 起動パラメータのメモリ値を十分な大きさに設定してください。

2. Java コードによって引き起こされるエラーの解決策: 次の点に注目してください:

1) コード内に無限ループまたは再帰呼び出しがないか確認します。

2) 新しいオブジェクト エンティティを繰り返し生成する大規模なループが存在するかどうかを確認します。

3) データベースクエリに全データを一度に取得するクエリがあるか確認します。一般に、一度に 100,000 レコードをメモリにフェッチすると、メモリ オーバーフローが発生する可能性があります。この問題は比較的隠れています。オンラインになる前はデータベース内のデータが少なく、問題が発生する可能性は低くなりましたが、オンラインになった後はデータベース内のデータが増え、1 つのクエリでメモリ オーバーフローが発生する可能性があります。したがって、データベース クエリにはページングを使用するようにしてください。

4) ListやMAPなどのコレクションオブジェクトが使用後にクリアされていないか確認してください。 List や MAP などのコレクション オブジェクトには常にオブジェクトへの参照があるため、これらのオブジェクトは GC によってリサイクルできません。

ケース: 1. Hibernate がデータをクエリする際、一度に大量のデータをクエリすることになります。その後、この部分のコードを調整し、毎回指定された量のデータのみを取り出すようにし、問題を解決しました。 2. ストレス テストを実行すると、OutOfMemoryError が発生し、セッション リソースが解放されていないことがわかります。セッションの validate() メソッドを使用してセッション リソースを解放するのが最善です。 3. プログラム内で無限ループが発生します。 4. Tomcat をデプロイして実行すると、OutOfMemoryError が発生します。この問題を解決するには、メモリ パラメータの値を増やします。

java.lang.OutOfMemoryError: Tomcat での Java ヒープ領域の例外処理

1. ヒープ サイズ JVM ヒープの設定は、JVM が割り当てて使用できるメモリ領域の設定を指します。 Java プログラムの実行中、JVM は開始時にヒープ サイズの値を自動的に設定します。その初期スペース (-Xms) は物理メモリの 1/64 で、最大スペース (-Xmx) は 1/4 です。物理メモリの。 -Xmn -Xms -Xmx および JVM によって提供されるその他のオプションを使用して設定できます。ヒープ サイズのサイズは、Young Generation と Tenured Generation の合計です。 ヒント: JVM では、時間の 98% が GC に使用され、使用可能なヒープ サイズが 2% 未満の場合、この例外メッセージがスローされます。 ヒント: 最大ヒープ サイズは、使用可能な物理メモリの 80% を超えてはなりません。通常、-Xms オプションと -Xmx オプションは同じ値に設定し、-Xmn は -Xmx 値の 1/4 に設定する必要があります。

2. 解決策: ヒープ サイズを手動で設定し、TOMCAT_HOME/bin/catalina.sh を「echo "Using CATALINA_BASE: $CATALINA_BASE"」に追加します: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize =256m "

java.lang.OutOfMemoryError in tomcat: PermGen スペース例外処理

1. PermGen スペース PermGen スペースの正式名は Permanent Generation スペースで、永続的な記憶領域を指します。このメモリは主に JVM によって格納されます。クラスおよびメタ情報は、クラスのインスタンス (インスタンス) が格納されるヒープ領域とは異なり、ローダーによってロードされるときに PermGen 領域に配置されます。 Collection) はメイン プログラムの実行中に PermGen スペースをクリーンアップしないため、アプリケーションに多くの CLASS がある場合、このエラーは Web サーバーが JSP をプリコンパイルするときによく発生します。 WEB APP が多数のサードパーティ jar を使用しており、そのサイズが jvm のデフォルト サイズ (4M) を超える場合、このエラー メッセージが生成されます。

解決策: MaxPermSize サイズを手動で設定し、TOMCAT_HOME/bin/catalina.sh を「echo "Using CATALINA_BASE: $CATALINA_BASE"」に追加します: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize =128m 提案: jar ファイルの繰り返しのメモリ使用量を減らすために、同じサードパーティの jar ファイルを tomcat/shared/lib ディレクトリに移動します。 ヒント: 「ervletException java.lang.OutOfMemoryError の根本原因」

解決策: bea/weblogic/common の CommEnv でパラメータを調整します: sun if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode set JAVA_VM=-client set MEM_ARGS = - 6m goto continue

java.lang.OutOfMemoryError: Eclipse が Jboss を実行するときの PermGen スペース例外処理

Eclipse で Jboss を実行するときに時間が長すぎると、java.lang.OutOfMemoryError: PermGen space エラーが発生することがあります。解決策は次のとおりです。

1) デバッグ アイコンの横にある小さな矢印をクリックします。 ) 「デバッグ構成...」メニュー項目をクリックします。

3) 左側の「汎用サーバー」ツリーの下にある「JBoss v4.2 at localhost」を選択します。

4) 右側の「引数」タブをクリックします。をクリックし、「VM 引数」を選択します:

-Dprogram.name=run.bat -Djava.endorsed.dirs="D:/JBoss405/bin/../lib/endorsed" -Xms128m -Xmx512m -XX:PermSize=64m -XX :MaxPermSize=256m

5) コマンドラインモードで JBoss を実行するか、「run.bat」を直接クリックする場合は、bin/run.conf ファイル内の JVM オプションを変更し、JAVA_OPTS= -Xms128m を見つける必要があります。 -Xmx512m…」をこの段落に追加し、最後に「-XX:PermSize=64m -XX:MaxPermSize=256m」を追加します。保存すればOKです。

6) 注: 数値 128、512、64、および 256 はマシンの構成に応じて調整でき、[適用] をクリックします。

Resin での java.lang.OutOfMemoryError の例外処理

原因: このエラーは通常、JVM の物理メモリが小さすぎるために発生します。 Java 仮想マシンのデフォルトの最大メモリはわずか 64 MB で、開発やデバッグ時には問題にならない可能性がありますが、アプリケーションが非常に小さくアクセスが少ない場合を除き、実際のアプリケーション環境のニーズを満たすには程遠いです。そうしないと、プログラムが一定時間実行された後に java.lang.OutOfMemoryError エラーが発生する可能性があります。したがって、レジンに使用できる仮想マシンのメモリのサイズを増やす必要があります。

解決策: /usr/local/resin/bin/httpd.sh の args オプションを変更し、物理メモリの使用量を制限するために使用できるパラメータ -Xms (初期メモリ) と -Xmx (最大使用可能なメモリ サイズ) を追加します。 JVMの。 例: args="-Xms128m -Xmx256m" 設定後、JVM の初期物理メモリは 128m、使用可能な最大物理メモリは 256m になります。 これら 2 つの値は、システム管理者がサーバーの実際の状況に応じて設定する必要があります。

転載元: http://www.cnblogs.com/cyjch/archive/2012/04/10/2440421.html

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。