0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TomcatのJFRダンプを取得するシェルスクリプト

Last updated at Posted at 2025-06-17

Javaアプリケーションのパフォーマンス解析で使用するJDK Flight Recorder(JFR)をファイルにファイルに出力するシェルスクリプトのサンプルです。このシェルではTomcatのJVMからJFRダンプを取得し、ログディレクトリへファイルを保存します。

#!/bin/bash

# TomcatのJVM PIDを取得
PID=$(jps -l | grep 'org.apache.catalina.startup.Bootstrap' | awk '{print $1}')

# PIDが取得できなければ終了
if [ -z "$PID" ]; then
  echo "TomcatのPIDが見つかりません。"
  exit 1
fi

# 保存先ディレクトリ
OUT_DIR="/opt/tomcat10/logs"

# 出力先ディレクトリがない場合はディレクトリを作成
if [ ! -d "$OUT_DIR" ]; then
  mkdir -p "$OUT_DIR"
fi

# タイムスタンプ付きファイル名
FILENAME="$OUT_DIR/flight_$(date +%Y%m%d_%H%M%S).jfr"

# JFRダンプ実行
jcmd "$PID" JFR.dump name=1 filename="$FILENAME"

メリット

・TomcatのPIDを自動で取得でき、手動で確認する手間が省けます。
・出力先ディレクトリが存在しない場合でも、自動で作成されるため柔軟です。
・タイムスタンプ付きでファイルが保存され、ログの管理が容易になります。

デメリット

・jps や jcmd が使えない環境(最小構成のJREなど)では動作しません。
・JFRが無効化されている場合、事前に有効化設定が必要です。
・Tomcatを複数インスタンス起動している環境では、対象PIDの判別に工夫が必要です。

cronの設定

crontabを使用することでシェルの定期実行が可能です。
次のような設定をすることで5分に1回JFRをファイルに出力することが可能です。

*/5  * * * * /root/jfr/jfr_out.sh > /dev/null 2>&1

取得頻度は環境に合わせてカスタマイズしてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?