visualvmをRemoteで利用する

JDK6からすげー便利なvisualvmというプロファイラが付属されています。
内容についてはこちらに詳しく書いてあるので端折ります。


このvisualvmをリモートで接続する場合はJMX経由で接続する方法とjstatdというデーモン経由で接続する方法があるようです。
どう違うのか気になったのですが私が調べた限りだと機能的には違いはないようです。
ただ、jstatsデーモンを起動しておけば、そのサーバ上で動いているそのjstatdを起動したユーザーと同じユーザー権限で起動しているjavaプロセスを全部表示することができるのでjstatdのほうがいいような気がします。
※いちいち全部のプロセスの起動スクリプトにJMXの設定いれるの面倒なので。



そんなわけでjstatdを起動しようとしたのですが、
http://d.hatena.ne.jp/tanamon/20091016/1255674058
を参考に

grant {
	permission java.security.AllPermission;
}

というall.policyを作って

jstatd -J-Djava.security.policy=all.policy &

って感じでjstatdは起動したのですが、jvisualvm側でリモート設定してもうんともすんともでした。



試しに

jps -l [jstatdが起動してるサーバのIP]

で確認してみると

Error communicating with remote host: Connection refused to host: 127.0.0.1; nested exception is: 
	java.net.ConnectException: Connection refused

なエラーが。



こちらに書かれている通りRMIの仕様上の問題っぽいので起動オプションを

jstatd  -J-Djava.security.policy=all.policy -J-Djava.rmi.server.hostname=[サーバのIP]

で起動してjvisualvmでリモート接続したら無事表示できました。