Jenkins を使っていると色々とトラブルことがあります。
そんな時に覚えておきたい手法をメモっておきます。
(※あくまで個人用メモです。)
ログを見る
Jenkins の管理ページからシステムログを見ることができます。
http://yourjenkins:8080/log/all
こちらを見ることで例外が発生していないかなどを確認することができます。
GC ログを見る
Jenkins の起動オプションに以下のオプションを追加します。
-Xloggc:gc.log
すると、指定したファイルに GC のログが出力されます。
これを、
gcviewer を使って表示するとこのようになります。
適切なメモリの設定については、あまり詳しくないので省きます。
(検索すればすぐにでてきます)
スレッドダンプ
Jenkins のスレッドダンプは、
http://yourjenkins:8080/threadDumpの URL から見ることができます。
または、Jenkins のサーバーマシンにアクセスできるようであれば、
jstack を使って取得することもできます。
jstack pid
プロセスID は jenkins の java のプロセスID を入力します。
プロセスID は jps コマンドでも調べることができます。
Windows でサービスとして Jenkins を動かしている場合は、
PsTools の psexec を使用して jstack を実行してください。
psexec -s "%JAVA_HOME%\bin\jstack.exe" pid
取得したダンプの解析には、
侍 というツールが良いらしい。
こんな感じで表示してくれます。
プロセスの監視
さらに詳しく状態を調べるには jconsole を使うのが良さげ。
コマンドプロンプトから jconsole を起動すると以下のような GUI が表示されるので、
Jenkins の java のプロセスを選択して接続します。
Windows サービスの場合は、psexec を使用して起動します。
psexec -s -i "%JAVA_HOME%\bin\jconsole.exe"
また、デフォルトの Jenkins の起動オプションでは接続できない(たぶん)ので、
起動オプションに以下のオプションを追加してください。(ポート番号は任意)
-Dcom.sun.management.jmxremote.port=8999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
jconsole が起動したら、リモートプロセスを選択し
localhost:8999
と入力し、接続ボタンを押してください。
接続するとこのようにメモリやスレッドなどの監視ができます。
検索する
最後に、上記方法で収集した情報をもとに同じような問題が報告されていないか(
issues)、
ブログに書いている人はいないか、つぶやいている人はいないか、検索してみると良いでしょう。