1

ColdFusion サーバーで問題が発生し、JRE を適切に構成することができませんでした。これで何が起こっているのかをトラブルシューティングするために、Oracle JRockit をインストールし、jvm.config を切り替えてメモリ リークを見つけようとしました。

JRockit をインストールすると、サーバーの動作が以前よりも向上しました。JRockit プログラムとコンソールを数日間開いたままにしましたが、メモリ使用量は 200 MB 未満にとどまりました。最終的にサーバー上のプログラムを閉じたところ、すぐにメモリ使用量の問題が再発しました。

これは、FusionReactor からの Java ヒープのスクリーン ショットで、何が起こっているかを示しています。

まだ十分な評価ポイントがないため、これをここに直接投稿することはできませんでした: http://www.weblisters.com/icm/FusionReactorJavaHeap-JRockit-Console.png

jvm.config ファイルの主な設定は次のとおりです。

java.home=C:/Progra~2/Java/jrockit-jdk1.6.0_33-R28.2.4-4.1.0/jre  

java.args=-server -Xms1024m -Xmx1024m  -Xgc:parallel -Dsun.io.useCanonCaches=false -Dcoldfusion.rootDir={application.home}/ -XX:+HeapDumpOnOutOfMemoryError -Xmanagement:ssl=false,authenticate=false,autodiscovery=true

このエラーは、Jrockit コンソールを閉じた直後にスローされました: エラー: tsStartJavaThread (src/jvm/threads/vmthread/lifecycle.c:1096) でこのコマンドを処理するのに十分なストレージがありません。

Attempting to allocate 1G bytes There is insufficient native memory for the Java Runtime Environment to continue.

JRockit コンソール ウィンドウを開いて実行すると、ガベージ コレクション (GC) が非常にうまく機能するように見える理由を知っている人はいますか? 恒久的な解決策としてそれを開いたままにしておくことはできません。

4

1 に答える 1

0

最終的に解決した解決策の更新を投稿すると思いました。JRockit を使用している間 (特にメモリ リーク テスト中) に GC の実行が大幅に向上したように見える理由は正確にはわかりませんが、GC が呼び出される頻度を制御できるように思われる JVM マシンの設定を見つけました。 .

-Dsun.rmi.dgc.client.gcInterval=27000 -Dsun.rmi.dgc.server.gcInterval=27000

これらの 2 つの設定により、GC を必要なだけ頻繁にまたは頻繁に呼び出すことができますが、既定の設定から変更する必要がありました。また、いくつかの優れたブログ記事 (下部にリンクがあります) に基づいて、java.args 行全体を更新しました。これは、サーバーが正常に実行されている更新された java.args です。

java.args= -server -DJINTEGRA_NATIVE_MODE -DJINTEGRA_PREFETCH_ENUMS -Xmx1024m -Xms1024m -XX:MaxPermSize=192m -XX:PermSize=192m  -XX:+UseParallelGC -Dsun.rmi.dgc.client.gcInterval=27000 -Dsun.rmi.dgc.server.gcInterval=27000 -Dcoldfusion.rootDir={application.home}/ -Djava.compiler=NONE -Xnoagent -Xdebug 

ブログ記事:

Trunkful.com CF_GEMS JVM を調整する方法パート 1

Trunkful.com CF_GEMS JVM のチューニング方法パート 2

于 2012-09-05T23:02:00.310 に答える