ヘッダーをスキップ
Oracle® JRockit診断およびトラブルシューティング・ガイド
リリースR28
B61438-02
  目次へ移動
目次

前
 
次
 

2 JVMの起動が遅い

この章では、JRockit JVMの起動が遅い原因となっている問題の、診断およびトラブルシューティングに役立つ情報を提供します。

この章の内容は以下のとおりです。

2.1 JVMの起動が遅い場合に考えられる原因

アプリケーションの起動時に動作が遅くなる問題には次の原因が考えられます。

2.2 JVMの起動が遅い場合の診断

2.3 アプリケーションの起動が遅い場合の診断

アプリケーションがデータ・ファイルを検索したり、データベース内のデータを調べたりする場合なども、起動が遅くなることがあります。

起動が遅い原因がアプリケーションにあると思われる場合は、フライト・レコーダ・ツールを使用してアプリケーション・データを記録および分析します。

フライト・レコーダ・ツールの詳細は、『Oracle JRockitフライト・レコーダ・ラン・タイム・ガイド』を参照してください。

2.4 タイミングの測定

アプリケーションの内部のタイミングは、System.nanoTime()およびSystem.currentTimeMillis()の各メソッドを挿入することで測定できます。これらのメソッドは実行時に追加的なリソースを消費することになりますが、パフォーマンスへの影響はわずかです。

System.nanoTime()

このメソッドは、最も正確なシステム・タイマーを使用して、単調なタイマー値を返します。戻り値はナノ秒単位ですが、タイマーの実際の時間単位はオペレーティング・システムとハードウェアによって異なる可能性があります。タイマー値を関連させるための通常のゼロ点はありません。したがって、有意なデータを得るには、少なくとも2回、時間を測定する必要があります。

nanoTime()では、オペレーティング・システムごとに異なるメソッドを使用します。

タイマーの時間単位(および、Linuxでは、時間値の取得に使用されるメソッド)に関する情報を取得するには、-Xverbose:timingコマンドライン・オプションを指定してJRockit JVMを起動します。

Windowsでの冗長タイミング・レポートの例を次に示します。

[INFO ][timing ] Fast time frequency is 1995000000hz
[INFO ][timing ] Drift is 0.00000021 = per day 0.018secs (max 300.000)
[INFO ][timing ] Hardware fast time enabled
[INFO ][timing ] Counter timer using resolution of 1995MHz

System.currentTimeMillis()

このメソッドは、現在の時刻をミリ秒単位で返します。現在の時刻は1970年1月00:00:00 UTCからの時間として定義されます。

アプリケーション起動時のミリ秒とナノ時間

JVMの起動時にSystem.currentTimeMillis()およびSystem.nanoTime()の値を取得するには、-Xverbose:starttimeコマンドライン・オプションを使用します。

-Xverbose:starttimeコマンドライン・オプションの出力の例を次に示します。

INFO ][startti] VM start time: 1260962573921 millis 6922526 nanos 18442244770397334 ticks

millis値はSystem.currentTimeMillis()メソッドが提供する値と同じ値、nanos値はSystem.nanoTime()メソッドが提供する値です。

2.5 JVMの起動が遅い場合の推奨解決策

起動を高速化するチューニング

コマンドライン・オプションを使用してJVMをチューニングする方法に問題がある場合もあります。

起動を速くするためのJVMのチューニングに関するヒントは、『Oracle JRockitパフォーマンス・チューニング・ガイド』を参照してください。

最適化の問題の除外

まれに、最適化が原因でJVMの起動が遅くなることが、特にシングルCPUマシンの場合にあります。詳細は、5.2項「最適化の問題のトラブルシューティング」を参照してください。

アプリケーションの問題の除外

Javaアプリケーションの問題が原因で起動が遅いと判断した場合は、その問題の原因をアプリケーションの観点から調査します。多くは、不必要な同期や不十分な同期リソース数の影響を受けているメソッドに問題があると考えられます。ボトルネックの原因となっているメソッドを特定し、可能であればJavaアプリケーションのコードを変更します。

同期の問題の分析にはフライト・レコーダ・ツールを使用できます。詳細は、『Oracle JRockitフライト・レコーダ・ラン・タイム・ガイド』を参照してください。

Oracleサポートへの連絡

『Oracle JRockitパフォーマンス・チューニング・ガイド』に示されているチューニング解決策を試しても問題が解決できない場合は、第9章「サポートに関するオラクルへの連絡」の説明に従ってOracleサポートにご連絡ください。