リモートJavaアプリをプロファイリングしようとしていますが、実際にはゲームサーバーです。私のローカル マシン (JDK1.7.0_02 x64 を搭載した Windows XP x64) では正常に動作しますが、運用サーバー (JDK1.7.0_03 i586 を搭載した CentOS) では非常に奇妙な動作をします。
多くの検索を行った結果、このタスクには VisualVM を使用する必要があることがわかりました。したがって、VisualVM はローカル マシンでうまく動作しますが、ローカル マシンでハングすることはありません。実稼働環境で実際のペイロードを使用してプロファイリングする必要があります。引数を指定してリモート マシンで jstatd を開始しました
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=false &
ポリシーファイルで
grant codebase "file:/usr/java/jdk1.7.0_02/lib/tools.jar" {
permission java.security.AllPermission;
};
次に、このようにJavaアプリケーションを開始しました
java -server -Dcom.sun.management.jmxremote\
-Dcom.sun.management.jmxremote.port=4000\
-Dcom.sun.management.jmxremote.ssl=false\
-Dcom.sun.management.jmxremote.authenticate=false\
-jar /home/pinballSocketServer/pinballSocketServer.jar
アプリケーションと jstatd の両方が root 権限で起動されます。
VisualVM はリモート ホストに接続できませんでした。しかし、リモート ホストでは、VisualVM が実行され、リモート ホストが追加されている間、次のログが表示されます。
Feb 16, 2012 7:11:52 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Feb 16, 2012 7:11:56 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Feb 16, 2012 7:12:00 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Feb 16, 2012 7:12:04 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
さらにグーグルで調べたところ、ssh トンネリングを使用する必要があることがわかりました。次の方法でパテを構成しました
http://www.advancedigital.ru/show/putty_config.jpg
およびVisualVMとして
http://www.advancedigital.ru/show/visualvm_config.jpg
上記の VisualVM の操作を追加すると、リモート ホストに接続されますが、スレッドの概要チャートしか表示されず、プロファイラーが非アクティブになっています。
両方のマシンの jvm は似ていて、同じプラットフォーム (x86 または x64) を持つべきであるといういくつかの推奨事項を見てきましたが、別のマシン (JDK1.7.0_03 x86 を使用した Windows 7 x86) からのプロファイリングを既に試しましたが、同じです。結果。
私もこれを試しましたが、再び同じ結果が得られます。 ssh 経由の VisualVM
このプロファイリングを機能させるにはどうすればよいですか?