jps(JVM Process Status Tool)は、JDKに標準搭載される軽量の診断ユーティリティで、**現在のユーザーが所有するJavaプロセスの一覧を即座に取得**できます。運用保守や障害対応において、まず最初に実行すべきコマンドであり、`jstack` や `jmap` など他のJVMツールへの入力(PIDの特定)にも不可欠です。
基本構文
jps [オプション] [ホスト識別子]
- オプション:出力形式を制御(必須ではない)
- ホスト識別子:リモート接続先(通常は省略。ローカル実行がデフォルト)
主要オプションの役割
| オプション | 機能 | 使用例 |
|---|---|---|
-q |
PIDのみ出力(クラス名・引数を抑制) | 12345 |
-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を活用