jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的java进程的内存占用,线程状态等信息。
一、配置tomcat
在tomcat的 catalina.sh
"-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.184.129 -Dcom.sun.management.jmxremote.rmi.port=9999"
各参数含义:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.184.129
-Dcom.sun.management.jmxremote.rmi.port=9999
二、配置主机名
hostname -i 命令查看主机名是否为外网访问ip 192.168.184.129
[root@localhost bin]# hostname -i
127.0.0.1 127.0.0.1
192.168.184.129
(1)修改 /etc/sysconfig/network
原文件内容为:
[root@localhost bin]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost.localdomain
HOSTNAME 为 192.168.184.129
[root@localhost bin]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=192.168.184.129
service network restart
(2)修改 /etc/hosts
原文件内容为:
[root@localhost bin]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 为 192.168.184.129
[root@localhost bin]# cat /etc/hosts
192.168.184.129 localhost localhost.localdomain localhost4 localhost4.localdomain4
hostname -i
[root@localhost bin]# hostname -i
192.168.184.129
三、配置防火墙
/etc/sysconfig/iptables 文件,加入 -A INPUT -m state --state NEW -m tcp -p tcp --dport 9999 ,然后 service iptables restart
四、配置jvisualvm
启动tomcat后,在windows本地jdk安装路径bin目录下找到 jvisualvm.exe
在“远程”上右键-->添加远程主机-->填写主机名:
点击确定后,远程选项下多了一条刚才添加的主机列表。右键-->添加JMX连接,如下图,填入JMX远程连接端口号 9999
点击确定后,左侧多了一条pid为6822的远程连接,6822是远程tomcat的pid:
双击该连接,在右侧可以动态查看jvm的概览信息,监控CPU,java堆,元空间,类,线程等数据:
五、常见问题
在添加JMX连接的时候,经常会出现如下报错:
此时可以从以下几个方向检查:
(1)检查tomcat应用是否启动,或者修改tomcat配置后是否重启tomcat,确保9999端口处于监听状态,查看命令 netstat -nl|grep 9999
(2)检查主机名是否和tomcat中配置的主机名相同,如果不同则按照第二步修改主机名;
(3)检查RMI端口号端口号是否在防火墙进行了配置,如果配置的RMI端口号和JMX端口号不一致,需要在防火墙配置RMI端口号允许访问,如果没有配置,则添加 -Dcom.sun.management.jmxremote.rmi.port=9999