2011年7月24日日曜日

CPU状態のダンプ

メモリーに関する記事を書いたので、次はCPUかな。
メモリー状態監視
メモリー状態ダンプ

CPUの状態となると、Thread状態のDumpでしょうか。

環境により、いろいろやり方がありますが今回はLinux用ということにしておきます。

1:SIGQUITをおくって標準出力に出す方法
$ kill -3 [プロセスID]
このコマンドを実行すると、ThreadDumpが取得できますが標準出力を殺すような動作させている場合にはつかえません。

2:jstackを利用する方法
$ jstack [プロセスID]なら関係なく取得することができます。コンソール上に出力する命令ですので、適当なファイルに出力するようにかえてやればOK
$ jstack [プロセスID] > /home/xxxxx/thread.dump
みたいな感じでどうぞ。

3:Java VisualVMを利用する方法
おなじみJavaVisualVM・・・
Threadの項目にThread Dumpというのがあるのでクリックする。

これを利用すると、デッドロックとかが検出できますね。
状態のDumpだけなので忙しいスレッドの取得等はできません。
そこででてくるのがこのコマンド
$ ps -efL | grep [プロセスID]
linuxのpsコマンドにLをいれるとプロセスごとではなくスレッドごとのデータを取得することができるので、上記のコマンドでどのスレッドのLoadAverageがあがっているのか確認することができます。
Threadの識別IDがわかったら、それをHexに直してJava側のDumpデータについているThreadの識別IDと比較してください。一致するThreadが問題のやつということになります。
これを利用すると、無限ループが発生している箇所の特定とかができますよ。

0 件のコメント:

コメントを投稿