刚刚接触分布式架构,才知道功能开发是多么得小儿科,大部分的问题都是出在性能瓶颈上,这时,我们需要及时的跟踪接口的服务调用链路,线程的使用情况,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工具就会被打开,如图,颜值还行,目测用着应该能挺方便

java jvisualvm 监控远程 jvisualvm远程监控服务器_java

打开工具后,链接刚才配置好的远程服务器,接下来的操作就是看图说话了,如果搞不懂,可以为自己的未来做个打算了(我就没搞出来,?)

好了,我要为自己的未来做一个打算了~