刚刚接触分布式架构,才知道功能开发是多么得小儿科,大部分的问题都是出在性能瓶颈上,这时,我们需要及时的跟踪接口的服务调用链路,线程的使用情况,JVM堆栈的情况,进而分析,导致系统变慢的原因。
今天给大家介绍一款可以连接远程服务器,对线程进行监控的JVM工具jvisualvm。首先,需要在我们远程的服务器配置好java环境等(废话,远程跑着程序怎么能没配置好java环境),在有了java环境之后,做什么事情心里都踏实了,接下来,就说一下我是怎么成功的运用jvisualvm工具链接上我们远程的服务器的;
1.在服务器是安装jstatd 组件; 直接执行 sudo apt-get install openjdk-6-jdk 即可;
2.在服务器上配置 jstatd 的 security policy 文件, jstatd是一个监控 JVM 从创建到销毁过程中资源占用情况并提供远程监控接口的 RMI ( Remote Method Invocation ,远程方法调用)服务器程序,它是一个 Daemon 程序,要保证远程监控软件连接到本地的话需要 jstatd 始终保持运行。
jstatd运行需要通过 -J-Djava.security.policy=*** 指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy ,可以在linux下的任何目录下创建该文件,不要纠结~ 我是在根目录创建的。 文件内容如下:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
${java.home}根据自己linux下的实际jdk路径灵活替换,不要无脑粘贴哦
3.修改服务器 hosts 文件中的 IP 地址
要使Java VisualVM 成功连接到远程服务器上,服务器端应该在 /etc/hosts 文件中把本机地址设为本机的 IP 地址。使用 hostname -i 命令查看,如果显示的是 127.0.0.1 或者与本机实际 IP 不一致的话,需要把 /etc/hosts 文件中相应的地址改为本机实际 IP 。
4.启动jstatd守护线程
sudo setsid /lhdata/tool/jdk1.8.0_172/bin/jstatd -J-Djava.security.policy=jstatd.all.policy -p 3099 -J-Djava.rmi.server.logCalls=true &
-p 3099表示将端口改为3099,默认可能是1099,第一次启动jstatd就没加-p 3099,导致启动失败,应该是线程被占据,所以遇到同样问题的童鞋可以用这种方法解决;
5.通过Java VisualVM 连接到服务器监控 Java 程序
打开cmd命令弹窗,输入**jvisualvm命令,**回车~VisualVM工具就会被打开,如图,颜值还行,目测用着应该能挺方便
打开工具后,链接刚才配置好的远程服务器,接下来的操作就是看图说话了,如果搞不懂,可以为自己的未来做个打算了(我就没搞出来,?)
好了,我要为自己的未来做一个打算了~