プロファイラって便利

久方ぶりに記事を書きます。

Javaでプログラム書いてたら徐々に実行速度が遅くなる現象が発生しました。

最初はArrayListのあたりが原因かと思ったのですが、どうにも違うようです。

にっちもさっちもいかなくなったのでプロファイラを使うことにしました。

 

今回使ったのは Java VisualVM というプロファイラでOracleが提供しているものです。

ScientificLinuxに標準で入っているようです。(OracleJDK入れた覚えがないので・・・)

起動するには

$jvisualvm

でok. 起動すると左側のツリーに現在起動しているjvmのプロセスが見えるので、接続したいプロセスを選択して接続しましょう。

f:id:jun_oya:20120904200959j:plain

こんな感じの画面になります。ヒープメモリなど大雑把な情報はこちらでわかります。今回みたいにどこが遅いのかわからんというケースでは、どこのプロセスがCPU時間を使ってるのか知りたいですね。そんな時はProfilerのタブをクリックして中段のCPUボタンをクリックしましょう。

f:id:jun_oya:20120904201008j:plain

しばらくするとこんな感じでメソッドごとのCPU時間が出てきます。

結果を見るにwaitが呼び出されて受信待ちをしている時間が多いように見えます。要改善ですね。