Java
jstat
ps
top

Javaで負荷のかかっているプロセスから対象クラスを探してくれるプログラムを作ってみた

はじめに

アプリケーションの負荷を調べるためにこの記事を試したところ
負荷をかけているプログラムが見つかりました。

https://qiita.com/tnakagawa/items/4d7d891af4913e2b5865

ただ、毎度コマンド打つのが大変なのでプログラムで自動でだせるようにしました。
githubで公開してありますのでどなたかのお役に立てれば幸いです。
ささっと作ってしまったのでとりあえず感満載でなんですがご了承ください・・・

https://github.com/ewai/check-java-process

動作確認済み環境

CentOS 6.7
java8

実行方法

実行

対象システム内で以下を実行してください。
実行した直下のディレクトリにlogディレクトリが作成されてそこにログが出力されます。
アプリケーションと同じ権限での実行が必要かと思います。

java -jar check-java-process.jar 50 30 packageName

https://github.com/ewai/check-java-process/tree/master/build/libs
ここに置いてあるjarを使ってもいいですし、
eclipseにgradle projectとしてインポートして微調整して使ってもいいと思います。

パラメーター

# 設定値 default 尾行
1 CPU(%) 50 この設定値以上のプロセスを探す
2 処理時間(秒) 10 この設定値以上のプロセスを探す
3 keyword 無し stacktraceにこのキーワードが入っているプロセスのみログに出力します

プログラムで何をしているか

  1. javaのプロセスを探す
  2. 1のスレッドダンプを取得する
  3. 1の子プロセスを探す
  4. 2と3をマッチングして子プロセスごとのstacktraceを出す。
  5. パラメータの閾値を超えているプロセスのみにする。
  6. パラメータのキーワードを含むプロセスのみにする。
  7. ログに出力する。

以上です。