1、前言

开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。

VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。
2、jvisualvm的安装

从官网下载https://visualvm.github.io/download.html,无需安装,直接解压放置于本地文件系统即可(如果放置于远程服务器,也可以实现远程服务器本地监控jvm)。
3、远程服务器配置JXM(也可以使用jstatd连接到远程)

1)第一步

在远程服务器上的JDK根目录下的/jre/lib/management文件夹下,将jmxremote.password.template文件复制一份jmxremote.password,然后打开jmxremote.password文件。

#monitorRole QED
     #controlRole R&D

将里面的这两行注释去掉,monitorRole和controlRole就是用户名,QED和R&D分别是密码。

2)第二步

修改启动参数:修改tomcat中bin文件夹catalina.sh文件,增加如下语句(jar包启动的项目,也可以在jar命令后面增加类似如下语句):

JAVA_OPTS="-Djava.rmi.server.hostname=192.168.240.131 -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

说明:hostname就是主机的地址,port就是端口号,请确认这个端口号不要被占用;ssl就是要不要加密,我这里链接的开发环境就不加密了;authenticate就是要不要用户认证,账号密码就是上一步中配置的。

3)第三步

关闭防火墙:运行完程序之后关闭服务器的防火墙,有很多教程都是让把上一步中设置的端口号打开,但是其实,JXM还需要监听两个随机的接口。要不直接关了防火墙,要不就把使用到的端口都打开。
4、配置jvisualvm

1)添加jmx连接

登录成功后如下图所示:

查看内容:

 

内存和cpu数据:

线程情况: