JRockit JVMは、大規模なサーバー環境でアプリケーションの実行中、常に安定したパフォーマンスを提供するように設計されています。アプリケーションを長期間実行していると、パフォーマンスが低下し始めていることに気付く場合があります。
この章では、パフォーマンスの低下の問題の識別と対処に役立つ情報を提供します。この章の内容は次のとおりです。
システムのパフォーマンスが低下し始めるときは、多くの場合、チューニングに問題があります。たとえば、圧縮が適切にチューニングされていないと、パフォーマンスが徐々に低下する可能性があります。これは、メモリー不足エラーの発生を避けるためにガベージ・コレクタによる完全な圧縮の実行が必要になるまで、ヒープの断片化が進むためです。
時間のかかるトラブルシューティングを行ったり緩和策を講じる前に、『Oracle JRockitパフォーマンス・チューニング・ガイド』の説明に従って、パフォーマンスが安定するようにJRockit JVMをチューニングしてください。
パフォーマンスの低下は、最適化の問題が原因である可能性があります。この問題は通常、プログラムがしばらく正常に実行された後に発生し、次のような症状となって現れます。
JVMがクラッシュします(詳細は第6章「JVMのクラッシュ」を参照)。
プログラムの予期しない箇所でNullPointerExceptions
がスローされます。
メソッドが誤った結果を返します。
これらの問題を報告する前に、(-XnoOpt
オプションを使用して)最適化を無効にしてからJVMの実行を試行してください。
最適化を無効にした後でパフォーマンスが向上する場合は、パフォーマンスが低下した原因が最適化の問題にあったと考えられます。6.5.1.3項「問題のあるメソッドの最適化プロセスからの除外」の説明のとおりに、ミスコンパイルされたメソッドを分離して除外するための手順に従います。
Javaでメモリー・リークが発生すると、メモリーを解放するためにガベージ・コレクタの動作が過度になるため、アプリケーションの実行が徐々に遅くなります。しばらくしてから、JVMはメモリー不足エラーをスローします。メモリー・リークの小さいアプリケーションでは、数日間アプリケーションが実行されてからメモリー不足エラーが発生する場合があります。
メモリー・リークの初期の兆候を見つけるため、フライト・レコーダ記録を行い、古いコレクションが行われるたびにその後のヒープ使用量を確認することができます。メモリー使用量が増加し続ける場合、メモリー・リークが発生している可能性があります。フライト・レコーダ記録の作成と解釈の詳細は、『Oracle JRockitフライト・レコーダ・ラン・タイム・ガイド』を参照してください。
メモリー・リークを引き起こしているクラスの特定に役立つ、メモリー・リーク・ディテクタを使用することでメモリー・リークを診断できます。メモリー・リーク・ディテクタの使用方法の詳細は、Oracle JRockit Mission Controlオンライン・ヘルプを参照してください。
この項に示されている解決策を試してもパフォーマンスの低下を解決できない場合は、第9章「サポートに関するオラクルへの連絡」の説明に従ってOracleサポートにご連絡ください。