Eclipse Test & Performance Tools Platform Project
http://www.eclipse.org/tptp/index.php
以前にYourkit Java Profilerという製品を購入して使ったことがあったけれど、もうだいぶ昔のバージョンになるし、新しいバージョンに更新するにはお金がかかるし、その古いバージョンがリモートのプロセスにアタッチして使うってことができるかどうか調べたことがなかった。AWS上のJavaプロセスにアタッチして、そのプロファイルをとりたかったので、リモートと簡単に接続できるのが必須だったのです。
とりあえずEclipseのサブプロジェクトっぽいEclipse TPTPというのをトライアル。リモートマシンにAgentをインストールしてやる必要があるのだけど、Linux用のパッケージをインストールしたら、中に含まれているソフトウェア構成用のファイルがなぜWindows形式でパスを記述してあって動かないという罠にかかる。Windowsメインで開発してるんですね...
- ダウンロードページから、All TPTP plugins をダウンロードする。
http://www.eclipse.org/tptp/home/downloads/ - 解凍して、eclipseディレクトリに上書きする
-
ダウンロードページから Agent Controller をダウンロードする。
http://www.eclipse.org/tptp/home/downloads/ -
解凍して、適当なディレクトリに展開する
-
Windows以外の環境の場合、回答したagentsディレクトリ配下にある agent.xml ファイルのパス情報が Windows用になっているものがあるので、binディレクトリにある readme.txt を参照しながら修正する。
- agents/org.eclipse.tptp.JavaTimeCollector/agent.xml
<= javaコマンドへのパスが気になるが、直さなくてもいいかも
- agents/org.eclipse.tptp.TimeCollector/agent.xml
<= いまのバージョンは直ってるかも -
bin ディレクトリに移動して、SetConfig.sh を実行して、問い合わせにこたえる。 Network mode以外、基本はデフォルトのままでよい。この場合通信は平文になると思う。
-
環境変数 JAVA_PROFILER_HOME にtptpの配置ディレクトリを設定する。 環境変数 LD_LIBRARY_PATH に、bin ディレクトリと lib ディレクトリが含まれるようにする。
-
プロファイルを取りたいJavaプログラムの実行オプションに以下を追加する。
-agentlib:JPIBootLoader=JPIAgent:server=enabled;<その他のオプション> <その他のオプション>はドキュメント参照 例: CPUの処理時間のメソッド単位の詳細を取得したい場合 CGProf:execdetails=true
7. TCPの10002-10006ポートを空ける。
### 使い方
リモートで走らせているプログラムのプロファイルを取得する場合。
1. プロファイル対象のプログラムを起動する
2. リモートエージェントの bin/ACStart.sh を実行し、エージェントを起動する。
3. Eclipseで[Run] > [Profile Configurations] でダイアログを開き、
- メニューの [Attach to Agent] で新規作成する。
- [Host]タブでHostを追加(10002ポート)し、[Agentタブ]でプロファイル対象のプロセスを選択する。
- [Profile]ボタンをクリックして開始する。