JDK/JRE、Javaツールについて説明します。
環境変数について
Interstage Application Server V13.0以降では、以下の環境変数にJDKのインストール先を設定していません。JDKツール等でJavaのコマンドを使用する場合は、フルパスで実行してください。
|
注意
JDKのインストール先を環境変数に設定して、Javaを使用することは、推奨していません。
その他の製品がPATHやJAVA_HOMEを上書きすると誤動作するため、設定しないでください。
クラッシュダンプの採取について
Interstage Application Server V13.0以降では、クラッシュダンプを出力しない場合に指定した、以下のオプションは指定できません。
-XX:-EnableCoreDump |
また、クライアントOSの場合は、デフォルトではクラッシュダンプが採取されなくなります。
クラッシュダンプの採取については、「チューニングガイド」の「OpenJDK 8のチューニング」-「チューニング方法」-「クラッシュダンプ・コアダンプ」を参照してください。
"-XX:UseFJcmsGC=タイプ"オプションについて
"-XX:UseFJcmsGC=タイプ"オプションは、OpenJDK 8では指定できません。
JDK/JRE 7の"-XX:UseFJcmsGC=タイプ"に相当するオプションは以下を指定してください。
-XX:UseFJcmsGC=type0またはtype0p指定に相当
-XX:NewRatio=7 |
利用者が細かくチューニング作業が行うことが可能なCMSパラレルGCを使用する場合に指定します。
-XX:UseFJcmsGC=type1またはtype1p指定に相当
-XX:NewRatio=2 |
New世代領域用GCでのオブジェクト回収を重視したCMS付きパラレルGCを使用する場合に指定します。
実行されるアプリケーションの特徴が「大半のオブジェクトが、少ない回数のNew世代領域用GCによって回収されるオブジェクト」である場合に、CMS-GCによる応答性能平準化の改善効果が得やすい調整になっています。
Javaヒープおよびメタスペースのチューニングを行う場合は、まず-Xms/-Xmxおよび-XX:MetaspaceSize/-XX:MaxMetaSpaceSizeの各オプションにより、メモリ割り当てプールおよびメタスペースの大きさを調整します。そして必要に応じて、-XX:NewSize/-XX:MaxNewSizeの各オプションでNew世代領域の大きさを調整します。
なおNew世代領域サイズとして、メモリ割り当てプール最大サイズ未満の値を指定できます。ただしNew世代領域サイズを大きくしすぎると、Full GCが発生しやすくなってしまうので注意が必要です。
注意
以下のオプションは、JDK/JRE 7で提供していた“-XX:UseFJcmsGC=タイプ”の代替用途以外では使用できません。
-XX:MaxTenuringThreshold
-XX:InitialTenuringThreshold
-XX:UseFJcmsGC=type2またはtype2p指定に相当
-XX:NewRatio=15 |
CMS-GCでのオブジェクト回収を重視したCMS付きパラレルGCを使用する場合に指定します。
実行されるアプリケーションの特徴が「大半のオブジェクトが、何回かのGCを経てから回収される(長期間常駐せず、ある程度の短期間で回収される)オブジェクト」である場合に、CMS-GCによる応答性能平準化の改善効果が得やすい調整になっています。
Javaヒープおよびメタスペースのチューニングを行う場合は、まず-Xms/-Xmxおよび-XX:MetaspaceSize/-XX:MaxMetaspaceSizeの各オプションにより、メモリ割り当てプールおよびメタスペースの大きさを調整します。そして必要に応じて、-XX:NewSize/-XX:MaxNewSizeの各オプションでNew世代領域の大きさを調整します。
なおNew世代領域サイズとして、メモリ割り当てプール最大サイズ未満の値を指定できます。ただしNew世代領域サイズを大きくしすぎると、Full GCが発生しやすくなってしまうので注意が必要です。
JAXPの変更
XML処理(JAXP)は、V13.0では、「OpenJDKの提供するJAXP」になります。
詳細については、「使用上の注意」の「XML処理(JAXP)を使用する際の注意事項」を参照してください。
シリアライズ・デシリアライズ時のチェック強化
V10.1以降では、シリアライズ・デシリアライズ時のチェックが強化されています。
java.io.ObjectOutputStreamクラスのdefaultWriteObjectメソッドとputFields/writeFieldsメソッドの両方が呼ばれる、あるいは、java.io.ObjectInputStreamクラスのdefaultReadObjectメソッドとgetFields/readFieldsメソッドの両方が呼ばれる場合、java.io.NotActiveExceptionが発生することがあります。
jheapの変更点
Interstage Application Server V7.0以降では、jheapのオプションの指定形式が変更となりました。
Interstage V6.0 | jheap processid [interval] |
本バージョン・レベル | jheap [-t] [-i interval] [-c count] processid |
本バージョン・レベルでは、Interstage Application Server V6.0と同様のコマンド形式も指定可能ですが、新しい指定形式に移行されることをおすすめします。
jheapの詳細は、「トラブルシューティング集」の「jheap」を参照してください。
jmapの変更点
Intersage Application Server V11.1以降では、インターン(intern)された文字列情報を表示する jmap のオプションが変更になりました。
IAPS | -permstat オプション(JDK8の場合は-clstatオプション) | -heap オプション |
---|---|---|
V11.0以前 | クラスローダー関連の統計+intern文字列 | ヒープサマリー |
V11.1以降 | クラスローダー関連の統計 | ヒープサマリー+intern文字列 |
jmapの詳細は、「トラブルシューティング集」の「JDKに含まれるトラブルシューティングに役立つツール」を参照してください。
Qualyzerの提供停止
本製品では、Qualyzerを提供していません。
QualyzerからJDK標準ツールへの移行について説明します。
JDK標準ツール(jconsole/jmap/jstat/jvisualvm/jhat)の詳細については、「JDKドキュメント」の「JDKツールとユーティリティ」を、それぞれの具体的な使用方法については、「トラブルシューティング集」の「Javaツール機能」の「チュートリアル」を参照してください。
メモリ/GC情報
Qualyzerの性能情報分析機能の「メモリ/GC情報」については、以下をご使用ください。
jconsoleの「メモリ」タブ
jmap
jstat
jvisualvmの「監視」タブ
CPU情報
Qualyzerの性能情報分析機能の「CPU情報」については、以下をご使用ください。
jvisualvmの「プロファイラ」タブ
サンプリング情報
Qualyzerの性能情報分析機能の「サンプリング情報」については、以下をご使用ください。
jvisualvmの「プロファイラ」タブ
メソッドトレース情報
Qualyzerの性能情報分析機能の「メソッドトレース情報」については、以下をご使用ください。
jvisualvmの「プロファイラ」タブ
メモリダンプ機能
Qualyzerのメモリダンプ機能については、以下をご使用ください。
jhat
jmap
jvisualvmの「プロファイラ」タブで「メモリー」ボタン
jvisualvmの「監視」タブで「ヒープダンプ」ボタン後、「heapdump」タブ
Java監視機能について
OpenJDK 8では、Java監視機能を提供していません。
ここでは、JDK標準ツールによる、Java VMに関するパフォーマンス・データの収集・表示について説明します。
JDK標準ツールについては、「JDKドキュメント」の「JDKツールとユーティリティ」を参照してください。
Java VisualVM開発者サイトは、次のURLで公開されています。
VisualVM
https://visualvm.github.io/
■メソッドサンプリング機能
メソッドサンプリング機能と同じ情報を取得するには、JDKに含まれるJDKツール「VisualVM」を利用します。
以下のいずれかの方法で情報を取得できます。(すでにVisualVMを起動し、対象アプリケーションにアタッチしているものとします。)
プロファイラ機能を利用する場合
「プロファイラ」タブ内の「CPU」ボタン
以下の情報を取得できます。
スタックトレース
現在のメソッドの実行情報
サンプリング情報
- セルフタイム(総サンプリング数に対する、該当メソッドのサンプリング数の比率)
- サンプリング期間内に該当メソッドがサンプリングされた回数
「プロファイル結果」の下の「スナップショット」ボタン
以下の情報を取得できます。
現在表示されているメソッドサンプリングの結果を保存
メソッド間の階層関係の表示
サンプラ機能を利用する場合
「サンプラ」タブ内の「CPU」ボタン(「CPUサンプラ」タブ)
以下の情報を取得できます。
スタックトレース
現在のメソッドの実行情報
サンプリング情報
セルフタイム(総サンプリング数に対する、該当メソッドのサンプリング数の比率)
「スナップショット」ボタン
以下の情報を取得できます。
現在表示されているメソッドサンプリングの結果を保存
メソッド間の階層関係の表示
サンプラ機能では「ツール」-「オプション」- 「プロファイル」- 「サンプラCPU」タブより、サンプリング間隔を変更できます。
注意
リモートマシン上で動作するJavaプログラムに対して、プロファイラ機能は利用できません。サンプラ機能を利用してください。
注意
プロファイラ機能ならびにサンプラ機能では、以下の情報は取得できません。
スタックトレース
各メソッドに対応するスタックトレース情報
サンプリング情報
総サンプリング数に対する、サンプリング数の累積比率
サンプラ機能のみ、以下の情報は取得できません。
サンプリング情報
サンプリング期間内に該当メソッドがサンプリングされた回数
プロファイラ機能ならびにサンプラ機能では、以下のサンプリング機能の設定はできません。
サンプリング間隔
ロギング
プロファイラ機能のみ、以下のサンプリング機能の設定は行えません。
トレースの深さ
■ヒープ分析機能
ヒープ分析機能と同じ情報を取得するためには、JDKに含まれるJDKツール「VisualVM」を利用します。
以下の手順で情報を取得できます。(すでにVisualVMを起動し、対象アプリケーションにアタッチしているものとします。)
「監視」タブ内の「ヒープダンプ」ボタン
生成されたヒープダンプのタブより、以下の情報を取得できます。
ヒープダンプ
注意
ファイルの出力先は「サマリー」ボタンを押下し、「基本情報」-「ファイル」に記載されます。
また複数のヒープダンプを生成し、そのタブ内の「クラス」ボタンを押下します。
「別のヒープ・ダンプと比較」リンクを押下し、他のヒープダンプを選択します。
これにより以下の情報を取得できます。
オブジェクトヒストグラム(Javaオブジェクトの使用状況の差分)
注意
ヒープダンプの比較情報はファイルに出力することができません。
■VMオプションの変更機能
OpenJDK 8でVMオプションを変更するのは、JDKに含まれるJDKツール「jinfo」を利用します。
以下のコマンドでVMオプションの確認、変更ができます。
GC表示ポリシー
現在のGC表示ポリシー設定の確認
jinfo -flag PrintGC <プロセスID>
jinfo -flag PrintGCtimeStamps <プロセスID>
現在のGC表示ポリシー設定を確認する例
C:\>jinfo -flag PrintGC 2784 -XX:-PrintGC
C:\>jinfo -flag PrintGCTimeStamps 2784 -XX:-PrintGCTimeStamps |
GC表示ポリシーの変更
表示なし
jinfo -flag -PrintGC <プロセスID>
jinfo -flag -PrintGCTimeStamps <プロセスID>
GC表示ポリシーを「表示なし」に変更する例
C:\>jinfo -flag -PrintGC 2784 C:\>jinfo -flag -PrintGCTimeStamps 2784 |
標準(PrintGCに相当)
jinfo -flag +PrintGC <プロセスID>
GC表示ポリシーを「標準」に変更する例
C:\>jinfo -flag +PrintGC 2784 [GC (Allocation Failure) 124883K->54427K(343552K), 0.0766944 secs] [GC (Allocation Failure) 131739K->61347K(353280K), 0.1069854 secs] : |
標準+経過時間(PrintGC、PrintGCTimeStampsに相当)
jinfo -flag +PrintGC <プロセスID>
jinfo -flag +PrintGCTimeStamps <プロセスID>
GC表示ポリシーを「標準+経過時間」に変更する例
C:\>jinfo -flag +PrintGC 2784 C:\>jinfo -flag +PrintGCTimeStamps 2784 63.814: [GC (Metadata GC Threshold) 141211K->69579K(357376K), 0.1200416 secs] 63.935: [Full GC (Metadata GC Threshold) 69579K->66582K(431616K), 0.9631842 secs] : |
System.gc()の抑止
現在のSystem.gc()抑止設定の確認
jinfo -flag DisableExplicitGC <プロセスID>
現在のSystem.gc()抑止設定を確認する例
C:\>jinfo -flag DisableExplicitGC 2784 -XX:-DisableExplicitGC |
System.gc()の検出
現在のSystem.gc()検出設定の確認
jinfo -flag PrintJavaStackAtSystemGC <プロセスID>
現在のSystem.gc()検出設定の確認
C:\>jinfo -flag PrintJavaStackAtSystemGC 2784 -XX:-PrintJavaStackAtSystemGC |
注意
以下のVMオプションの変更はできません。
アプリケーションを再起動し、その際にVMオプションを指定してください。
System.gc()の抑止
-XX:+(-)DisableExplicitGC
System.gc()の検出
-XX:+(-)PrintJavaStackAtSystemGC
また、OpenJDK 8のjinfoコマンドでは、以下の機能は使用できません。
GC表示ポリシー
- 詳細
タイムスタンプ形式
TLSの再ネゴシエーションについて
JDK/JRE 6 Update 22、JDK/JRE 7 よりTLSの再ネゴシエーション方法が変わっています。
詳細については、「使用上の注意」の「Transport Layer Security (TLS) の再ネゴシエーションについて」を参照してください。
java.net.SocketPermission のデフォルトについて
JDK/JRE 6 Update 71 、JDK/JRE 7 Update 51 よりSocketPermissionのデフォルトが変更されます。
詳細については、「使用上の注意」の「java.net.SocketPermission のデフォルトについて」を参照してください。
SSLv3プロトコルの無効化について
Interstage Application Server V12.0より、SSL通信を行う際に、デフォルトで利用可能なプロトコルとして、SSLv3が使用できなくなります。
詳細については、「使用上の注意」の「SSLv3プロトコルの無効化について」を参照してください。
暗号アルゴリズムについて
Interstage Application Server V13.0より、V12.3以前で使用できていた暗号アルゴリズムが使用できなくなります。
詳細については、「使用上の注意」の「暗号アルゴリズムの無効化について」、および「暗号アルゴリズムに関する動作の変更について」を参照してください。