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) が非常にうまく機能するように見える理由を知っている人はいますか? 恒久的な解決策としてそれを開いたままにしておくことはできません。