Enterprise Application Platformでのトラブルシューティング技法(第1回):OpenJDK 11のJDKツールの概要を知る
富士通技術者ブログ~Javaミドルウェア~
2020年10月16日 初版
2022年10月3日更新
笠井 輝美
FUJITSU Software Enterprise Application Platform(以下、Enterprise Application Platform)でのトラブルシューティング技法の1つに、Javaで使うトラブルシューティングツールがあります。
Javaで使うトラブルシューティングツールは、様々なものがあり、またJavaのバージョンごとにも進化してきています。これまで、FUJITSU Software Interstage Application Server(以下、Interstage Application Server)でJDK 8を利用していただいてる方には、Enterprise Application Platformに移行した際に、使用ツールが変わったり、使用方法が変わることがあるため、ツールの対応について説明します。
Enterprise Application PlatformとInterstage Application Serverで提供するツールの概要
Enterprise Application Platformで提供するOpenJDK 11で利用できるツールと、Interstage Application Serverで提供するJDK 8で提供するツールの違いの概要は以下のとおりです。
JDK 8からJDK 11に追加されたJDK標準ツール
- jhsdb
JDK 8からJDK 11で削除されたJDK標準ツール
OpenJDK 11では、以下のツールは提供されなくなりました。これにともない、Enterprise Application Platformでも、以下のツールは提供しません。該当機能を使用する場合は、「Interstage Application ServerとEnterprise Application PlatformのJDKツール比較」を参照してください。
- jhat
- jsadebugd
- jvisualvm
Interstage Application Server V12のJDK 8で提供して、Enterprise Application PlatformのJDK 11で提供しない富士通独自ツール
以下のツールは、Interstage Application Server V12(JDK 8)では提供していましたが、Enterprise Application Platform(OpenJDK 11)では提供していません。該当機能を使用する場合は、「Interstage Application ServerとEnterprise Application PlatformのJDKツール比較」を参照してください。
- スレッドダンプツール(thdump / thdumpSVC)
- メソッドトレース(fjtrace)
- Javaヒープ使用量出力ツール(jheap)
参考
Enterprise Application PlatformのOpenJDK 11の各JDKツールの使い方については、以下を参照してください。
Interstage Application ServerとEnterprise Application PlatformのJDKツール比較
JDK標準ツールのコマンドは、上からアルファベット順に掲載し、最後に富士通独自のコマンドを記載しています。また、表中の「レ」は機能有り、「N/A」は機能無しです。
ツール | 概要 | Interstage Application Server(JDK 8) | Enterprise Application Platform(OpenJDK 11) | Enterprise Application Platformで該当機能を使う方法 |
---|---|---|---|---|
jconsole | Javaアプリケーションをモニターして管理するためのグラフィカル・コンソール | レ | レ | |
jhat | ウェブブラウザーを使ってヒープダンプをブラウズする | レ | N/A | Eclipse IDEのプラングイン(Memory Analyzerなど)やJMCなど |
jinfo | 指定されたJavaプロセスに関するJava構成情報を生成する | レ | N/A | 「jinfoとjcmdの機能マッピング」を参照 |
jcmd | 実行中のJava仮想マシン(JVM)に診断コマンド要求を送信する | レ | レ | |
jmap | 指定されたプロセスの詳細を出力する | レ | N/A | 「jmapとjcmd / jhsdbの機能マッピング」を参照 |
jps | ターゲット・システム上で計測されたJVMをリストする | レ | レ | |
jsadebugd | Javaプロセスまたはコアファイルに接続し、デバッグサーバーとして機能する | レ | N/A | |
jstack | 指定されたJavaプロセスに関するJavaスレッドのJavaスタック・トレースを出力する | レ | N/A | 「jstackとjcmd / jhsdbの機能マッピング」を参照 |
jstat | JVMの統計情報をモニターする | レ | レ | |
jstatd | Java HotSpot VMの作成および終了をモニターする | レ | レ | |
jvisualvm | Javaアプリケーションのモニタリング、トラブルシューティングおよびプロファイリングを視覚的に行う | レ | N/A | VisualVM |
fjtrace | Javaアプリケーションのメソッドの呼出しをトレースする | レ | N/A |
BTraceなどのトレースツール (補足)トレース用のコードが必要だが、出力フォーマットの調整など、fjtraceより詳細なことが可能 |
jheap | 実行中のJavaプログラムのヒープ使用状況を出力する | レ | N/A | jstat (補足)intervalを指定するとjheapと同様に一定間隔で出力される |
thdump | Javaプログラムが通常のアプリケーションとして動作している場合に使用し、各スレッドの状態をスレッドダンプとして出力することで、プログラム全体や各スレッドにおける実行状況の解析を助ける | レ | N/A | jcmd [pid | main-class] Thread.print (補足)ただし出力先はツール側 |
thdumpSVC | JavaプログラムがWindowsサービスとして動作している場合に使用し、各スレッドの状態をスレッドダンプとして出力することで、プログラム全体や各スレッドにおける実行状況の解析を助ける | レ | N/A | jcmd [pid | main-class] Thread.print (補足)ただし出力先はツール側 |
jinfoとjcmdの機能マッピング
以下の表は、jinfoの各オプションと同等の機能を実現するjcmdのオプションを示します。
Interstage Application Server(JDK 8) | Enterprise Application Platform(OpenJDK 11) | 備考 |
---|---|---|
jinfo <pid> | jcmd <pid> VM.system_properties jcmd <pid> VM.flags |
システムプロパティとVMフラグが出力されるコマンド2つで同等の機能となる |
jinfo -flag <name> <pid> | jcmd <pid> VM.flags -all | 特定のフラグを表示させることはできないので、すべてを表示してgrepする |
jinfo -flag [+|-]<name> <pid> | jcmd <pid> VM.set_flag <name> [true|false] | |
jinfo -flag <name>=<value> <pid> | jcmd <pid> VM.set_flag <name> <value> | |
jinfo -flags <pid> | jcmd <pid> VM.flags | |
jinfo -sysprops <pid> | jcmd <pid> VM.system_properties | |
jinfo <executable> <core> | jhsdb --core <core> --exe <executable> | |
jinfo [server_id@]<remote server IP or hostname> | 該当コマンドなし |
jmapとjcmd / jhsdbの機能マッピング
以下の表は、jmapの各オプションと同等の機能を実現するjcmd / jhsdbのオプションを示します。
Interstage Application Server(JDK 8) | Enterprise Application Platform(OpenJDK 11) | 備考 |
---|---|---|
jmap <pid> | jcmd <pid> VM.dynlibs または jhsdb jmap --pid <pid> |
jcmdの出力フォーマットは以下が異なる
|
jmap -heap <pid> | jhsdb jmap --heap --pid <pid> | |
jmap -histo[:live] <pid> | jcmd <pid> GC.class_histogram [-all] | -allオプションなしが:liveに相当 |
jmap -clstats <pid> | jcmd <pid> VM.classloader_stats |
出力フォーマットは以下が異なる
|
jmap -finalizerinfo <pid> | jcmd <pid> GC.finalizer_info | |
jmap -dump:<dump-options> <pid> | jcmd <pid> GC.heap_dump [-all] <filename> |
|
jmap -F <pid> | jhsdb jmap --pid <pid> | |
jmap <executable> <core> | jhsdb jmap --core <core> --exe <executable> | |
jmap [server_id@]<remote server IP or hostname> | 該当コマンドなし |
jstackとjcmd / jhsdbの機能マッピング
以下の表は、jstackの各オプションと同等の機能を実現するjcmd / jhsdbのオプションを示します。
Interstage Application Server(JDK 8) | Enterprise Application Platform(OpenJDK 11) |
---|---|
jstack <pid> | jcmd <pid> Thread.print |
jstack -F <pid> | jhsdb jstack --pid <pid> |
jstack -m <pid> | 該当コマンドなし |
jstack -l <pid> | jcmd <pid> Thread.print -l |
jstack <executable> <core> | jhsdb jstack --core <core> --exe <executable> |
jstack [server_id@]<remote server IP or hostname> | 該当コマンドなし |
最後に
今回は、Enterprise Application Platformで使用できるツールを説明しました。次回より、Javaに関するトラブルシューティング技法を紹介していきます。
本コンテンツに関するお問い合わせ
お電話でのお問い合わせ

Webでのお問い合わせ

当社はセキュリティ保護の観点からSSL技術を使用しております。