0%

VisualVM远程监控JVM

VisualVM在Java 8中是JDK自带的一个图形化工具,项目主页 VisualVM,在后续版本中可能会从JDK移除。

VisualVM可以监控Java进程的CPU与内存占用情况,可以监控Java进程内的各个线程的执行情况,还可以与MAT工具一样用来分析堆转储快照。

Mac VisualVM路径

/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands

监控远程Tomcat进程

监控远程主机上的Tomcat进程,需要在Tomcat的catalina.sh文件中加入参数:

1
JAVA_OPTS="$JAVA_OPTS -Dcom.sum.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPV4Stack=true -Djava.rmi.server.hostname=x.x.x.x"
  • -Dcom.sum.management.jmxremote: 启用JMX远程连接
  • -Dcom.sun.management.jmxremote.port=9004: 设置JMX连接端口
  • -Dcom.sun.management.jmxremote.authenticate: 是否开启用户名密码认证
  • -Dcom.sun.management.jmxremote.ssl: 是否使用SSL连接
  • -Djava.net.preferIPV4Stack: 优先使用IPV4
  • -Djava.rmi.server.hostname: 设置JMX主机IP

打开VisualVM,文件 -> 添加JMX连接,输入刚才设置的IP和端口号:

image-20200908162617992

通过jstatd启动RMI服务

  1. 文件路径**$JAVA_HOME/jre/lib/security/java.policy**,在文件末位的 }; 前添加
1
permission java.security.AllPermission;
  1. 在被监控机器启动
1
2
cd $JAVA_HOME/bin
./jstatd -J-Djava.security.policy=all.policy &

​ 启动后会开启注册端口1099和一个随机的连接端口,注册端口也可通过-p参数指定,如

1
./jstatd -J-Djava.security.policy=all.policy -p 10003 &
  1. 设置防火墙

    除了把1099添加到防火墙规则外,还需要找到另外一个随机端口,也加入到规则中
    执行
    netstat -anp | grep *jstatd

  2. 测试

    启动VisualVM,因为在配置JMX时已经添加过服务器节点,如果配置正确,通常VisualVM会自动检测到jstatd连接并添加节点

    如果没有自动添加,可以检查端口是否能连通并尝试手动添加连接

image-20200908163214196