JavaVisualVM监控远端JAVA程序

远端系统:Linux
首先进入JAVA_HOME/../bin检查有没有jstatd这个可执行文件,如果没有请google怎么安装
然后在这个目录创建一个文件:jstatd.all.policy,一般都是用这个名字,创建文件代码:

vi jstatd.all.policy

文件内容:

grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;
   };

这个文件主要就是指明jstatd使用的安全策略。
然后Esc :wq保存文件,如果遇到权限问题请google chmod用法。
然后用以下代码查看hostname是不是本机IP,如果不是在/etc/hosts文件中更改

hostname -i

接着运行jstatd守护程序这个程序需要一直运行,所以推荐如下两种方法:
1. screen

screen jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=true 

后面那句是日志功能如果不需要可以不写 -J-Djava.rmi.server.logCalls=true 然后按ctrl+a+d返回shell,如果想切换回 jstatd 运行界面的话,使用 screen -r -d命令即可。
2. nohup

nohup jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=true &

这样会在后台运行可以用ps -A查看是否程序已经运行。
打开这个以后就可以开始跑我们的远端java程序了,以我的socket服务器为例:

nohup java -Djava.security.policy=jstatd.all.policy -Djava.rmi.server.logCalls=true -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar /home/irteam/socket20150826.jar&

这个服务我们也在后再运行,-D后面跟着的都是JVM的参数,这里我们用8888作为连入端口。
这时候就可以在我们的本地打开JavaVisualVM了,在远端那点击右键输入我们的远端主机IP,然后你会看到
JavaVisualVM监控远端JAVA程序_第1张图片
双击java进程就可以监控远端java服务的CPU,内存,线程,调用栈等。
JavaVisualVM监控远端JAVA程序_第2张图片
如果你在本地还是无法查看远端java请尝试在$JAVA_HOME/jre/lib/management下将jmxremote.password.templete重命名为jmxremote.password

mv jmxremote.password.templete jmxremote.password

如果权限不足请google如何使用chmod
然后进入文件将最后2行的
#monitorRole QED
#controlRole R&D
前面的#删除然后保存ESC :wq

你可能感兴趣的:(性能分析)