Java Web Startで起動しているアプリにプロファイラをかける

JavaWebStart上で動いた時のみ発生するような故障は、解析がすごく大変ですよね。
一応、その方法のメモを残します。

JavaWebStartは、javawsから起動されるjavaw上でアプリケーションが実行されているので、まずEclipseからjavawsを起動する必要がある。
Eclipseから起動されたjavawsに対して、プロファイルするためのDLLおよびポート番号等を渡さなければならない。
コマンドラインから以下を実行することでJava Web Startを起動することができる。


>javaws.exe [URL]
その際、以下のコマンドが実行される。(長いので折り曲げ)
実際、コマンドラインから起動するには、-cpでjavaws.jarとjavaws-l10n.jarにクラスパスが必要。

>java
"-Djnlpx.heapsize=NULL,NULL"
"-Djnlpx.splashport=1089"
"-Djnlpx.home=C:\java\j2sdk1.4.2_02\jre\javaws"
"-Djnlpx.deployment.user.home=C:\Documents and Settings\username\Application Data\Sun\Java\Deployment"
"-Djnlpx.deployment.system.home=C:\WINNT\Sun\Java\Deployment"
"-Djnlpx.jvm=C:\Program Files\Java\jre1.5.0_01\bin\javaw.exe"
com.sun.javaws.Main
[ファイル名]
最後のファイル名は、jnlpファイルとなるが、jnlpファイルは、ユーザのTempディレクトリに一度保存されてそれが引数に渡される形になる。
デバッグするためには上記コマンドの一部を書き換える。

"-Djnlpx.jvm=C:\Program Files\Java\jre1.5.0_01\bin\java.exe"
また、javaws.exeから起動されるjava VMへの引数は、以下のように渡す。

"-Djnlpx.vmargs=xxx"
ここで使用するプロファイラは一応何でも良いのですが、プロファイリング情報をリモートで取得できるものを利用する。私は、最近Enerjyを使用しています・・・。Enerjyを使用する場合は以下のように記述する。

"-Djnlpx.vmargs=-Xrunesmem:localhost,8181"
これを起動すれば、Eclipseに登録されているEnerjyが起動しプロファイルすることができる。
起動するための"-D"オプションが分かりにくかった・・・。