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の出力フォーマットは以下が異なる
  • メモリー上でのサイズの表示が末尾のアドレスが表示される
  • jhsdbは同じ出力フォーマット
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 出力フォーマットは以下が異なる
  • メモリー上でのサイズの表示が末尾のアドレスが表示される
  • VM.classloadersで親ClassLoaderの情報は取得可能
jmap -finalizerinfo <pid> jcmd <pid> GC.finalizer_info  
jmap -dump:<dump-options> <pid> jcmd <pid> GC.heap_dump [-all] <filename>
  • dump-optionsのliveは-allに対応
  • dump-optionsのfileは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に関するトラブルシューティング技法を紹介していきます。

本コンテンツに関するお問い合わせ

お電話でのお問い合わせ

富士通コンタクトライン(総合窓口)

0120-933-200

受付時間:9時~12時および13時~17時30分
(土曜日・日曜日・祝日・当社指定の休業日を除く)

Webでのお問い合わせ

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

ページの先頭へ