龙空技术网

jvisualvm连接远程服务器JVM实现内存GC监控

她的名字ych 209

前言:

现时小伙伴们对“java实现远程桌面”可能比较关注,看官们都想要知道一些“java实现远程桌面”的相关知识。那么小编在网上汇集了一些有关“java实现远程桌面””的相关资讯,希望看官们能喜欢,小伙伴们一起来学习一下吧!

jdk自带的jvisualvm远程连接服务器有两种方式:jmx和jstatd。然而这两种方式各自都有缺陷,分别是

jmx不支持Visual GCjstatd不支持CPU监控

因此,如果将两者结合起来使用,将会实现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。

首先,在控制台输入jvisualVm,如果没有配置java环境变量,则需要在jdk路径的bin文件夹下打开jvisualvm.exe然后,会自动弹出一个界面,可以自动检测到本地JVM的实时活动,连接远程服务器则需要进行配置,添加远程主机,主机名写具体服务器的ip和端口号。 在这个界面,我们可以看到CPU使用情况、JVM堆内存大小的变化、类加载数量和线程的实时情况。然而,我们无法观察GC的情况,点击Visual GC,出现界面如下

因此,为了查看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

最后,点击Visual GC,界面就出现了

另外,如果想指定新生代和老年代的大小,可以参考以下指令

-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

如下所示

标签: #java实现远程桌面