发布时间:2026-07-21阅读(1)
jdk自带的jvisualvm远程连接服务器有两种方式:jmx和jstatd。然而这两种方式各自都有缺陷,分别是
因此,如果将两者结合起来使用,将会实现Visual GC和CPU监控功能。
Prepare在使用两者之前,需要分别对启动参数和jstat进行配置。
启动参数开启 jmx远程服务权限
执行jar包时,指定执行指令。
hostname:远程服务器地址
-Dcom.sun.management.jmxremote.port:用于在jvisualvm控制界面远程连接jmx的端口号
java -Djava.rmi.server.hostname=10.11.2.62 \ -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.rmi.port=7098 \ -Dcom.sun.management.jmxremote.port=7099 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ -XX: HeapDumpOnOutOfMemoryError \ -XX:HeapDumpPath=/app/gc.hprof \ -jar xxx.jar

本地jVisualVm远程连接服务器的JVM。

因此,为了查看GC的使用情况,需要使用jstatd连接
(1) 在服务器上的java安装的bin下(如/usr/local/java/jdk1.8.0_91/bin)新建一个文件名为jstatd.all.policy,内容如下
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
(2) 在其bin目录下执行以下语句
./jstatd -J-Djava.rmi.server.hostname=10.11.2.62 -J-Djava.security.policy=jstatd.all.policy -p 9999 &
10.11.2.62:表示服务器地址
9999:自定义端口,如果不写,就默认为1099
(3) 在外部执行telnet命令,查看端口是否生效
telnet 10.11.2.62 9999
(4) 如果连不通,可能是服务器防火墙拦截,此时关闭防火墙或者添加规则
(5) 连接jstat



另外,如果想指定新生代和老年代的大小,可以参考以下指令
-Xms1024m -Xmx1024m -XX:NewSize=300m -XX:MaxNewSize=300m -XX:SurvivorRatio=8
参考网上图片
它表示,整个堆空间大小为1024M,新生代大小为300M,eden:from:to=8:1:1
Eden区:300 * 80% = 240M
From区:300 * 10% = 30M
To区:300 * 10% = 30M
Old区:1024 - 300 = 724M
如下所示

Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图