JVMプロセス監視の起点:jpsコマンドの実践的活用法

jps(JVM Process Status Tool)は、JDKに標準搭載される軽量の診断ユーティリティで、**現在のユーザーが所有するJavaプロセスの一覧を即座に取得**できます。運用保守や障害対応において、まず最初に実行すべきコマンドであり、`jstack` や `jmap` など他のJVMツールへの入力(PIDの特定)にも不可欠です。

基本構文

jps [オプション] [ホスト識別子]
  • オプション:出力形式を制御(必須ではない)
  • ホスト識別子:リモート接続先(通常は省略。ローカル実行がデフォルト)

主要オプションの役割

オプション 機能 使用例
-q PIDのみ出力(クラス名・引数を抑制) 12345
12346
-l 完全修飾クラス名またはJARファイルの絶対パス /opt/app/backend.jar
-m main()に渡されたコマンドライン引数 OrderProcessor --env=staging
-v JVM起動時の全オプション(GC設定、ヒープサイズ、システムプロパティ含む) -Xms1g -Xmx4g -XX:+UseZGC -Dlog.level=debug
-J jps自身のJVMへパラメータを渡す(例:-J-Xms32m 内部処理のメモリ制限調整用

代表的な実行パターン

① デフォルト表示(PID+簡易クラス名)

$ jps
8901 WebServer
8902 Jps

Jps自体も一時的にJavaプロセスとして検出されます。

② PID抽出(自動化スクリプト向け)

$ jps -q | grep -v "Jps"
8901

シェルスクリプトでPIDを変数に代入する際の定番:

APP_PID=$(jps -q | head -n 1 | grep -v "Jps")
jstat -gc $APP_PID 1s

③ 実行対象の明確化(-l推奨)

$ jps -l
8901 /srv/apps/payment-service.jar
8902 org.apache.catalina.startup.Bootstrap

Fat JAR起動時はJARパス、WARデプロイ時はブートストラップクラスが表示されます。

④ 起動引数の確認(Spring Boot環境で有効)

$ jps -m
8901 PaymentService --spring.profiles.active=prod --server.port=8081

プロファイルやポート設定の誤りを素早く検出できます。

⑤ JVM設定の検証(本番環境での必須チェック)

$ jps -v | grep 8901
8901 PaymentService -Xmx3g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Dfile.encoding=UTF-8

コンテナ環境では-XX:+UseContainerSupportが有効か否かもここで確認可能です。

⑥ 組み合わせ活用(実務で最も有用)

# JARパス+JVM引数(信頼性の高い識別)
$ jps -lv

# main引数+JVM引数(構成検証に最適)
$ jps -mv

よくあるトラブルシューティング

  • プロセスが表示されない
    ps aux | grep '[j]ava' で代替確認。原因として、-XX:+DisableAttachMechanism指定、Alpine Linuxのmusl互換性問題、またはJVM初期化直後のタイミングが考えられます。
  • コンテナ内で空出力
    → プロセス所有者とjps実行者が異なるため。以下で解決:
    su - appuser -c "jps -l" または ps -eo pid,args | grep java
  • クラス名がLauncher系ばかり
    → Spring BootのFat JARではorg.springframework.boot.loader.JarLauncherがデフォルト。この場合は-lでJARパス、-mでプロファイルを併用して特定します。

連携ワークフロー例

高負荷Javaプロセスの自動診断スクリプト

#!/bin/bash
TARGET_PID=$(jps -q | head -1)
echo "Target PID: $TARGET_PID"

# スレッド単位のCPU使用率をリアルタイム表示
top -H -p $TARGET_PID -n 1 > /var/log/jvm/top-$TARGET_PID.log

# スレッドダンプを保存
jstack "$TARGET_PID" > "/var/log/jvm/tdump-$(date +%s).txt"

出力フォーマットの読み方

カラム位置 意味 補足
1列目 OSプロセスID(PID) 他のJVMツールへの入力に必須
2列目(デフォルト) メインクラス名またはJARファイル名 -l未指定時は短縮形
2列目以降(-m時) main(String[])の引数 スペース区切りで表示
2列目以降(-v時) JVM起動オプション全体 システムプロパティも含む

運用上のポイント

  • 手動調査にはjps -lvを標準とする
  • CI/CDパイプラインや監視スクリプトではjps -qを採用
  • コンテナ環境ではps -eo pid,comm,argsをフォールバック手段として常に準備
  • 継続的なメトリクス収集にはjpsではなくJMXやMicrometerを活用

タグ: jps JVM java-diagnosis shell-scripting container-troubleshooting

7月10日 17:11 投稿