使用jvisualvm监控远程Linux服务器上jar的jvm状态
最近使用nginx流媒体服务器进行视频转码拉推流时出现内存溢出的问题,用jdk自带的jvisualvm工具看了下本地环境也没啥问题,会定期释放内存,于是想看下程序在服务器上运行时的内存使用情况。
具体操作如下:
1.在启动jar命令里加上几个参数:
-Djava.rmi.server.hostname=125.124.153.36 #需要监控的远程服务器的IP
-Dcom.sun.management.jmxremote #表示jvisualvm使用JMX进行远程连接
-Dcom.sun.management.jmxremote.port=1099 #jvisualvm远程连接要使用的端口,1099是默认的
-Dcom.sun.management.jmxremote.rmi.port=1099 #我的Linux服务器是CentOS,必须指定这个端口才能连接上
-Dcom.sun.management.jmxremote.authenticate=false #指定JMX是否启用鉴权(需要用户名,密码鉴权)
-Dcom.sun.management.jmxremote.ssl=false #指定JMX是否开启ssl
完整的启动命令例子:java -Djava.rmi.server.hostname=125.124.153.36 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xms1G -Xmx1G -jar xxx.jar > /mct/sdc/logs/xxx.log 2>&1 & tailf /mct/sdc/logs/xxx.log
2.去jdk的bin目录下打开jvisualvm工具,点击添加JXM连接按钮,在弹处框中填写刚才启动命令里的ip和port,点击连接就成了。
3.如果连不上,先看下网络通不通,本地终端执行: telnet 125.124.153.36 1099,要保证端口是通的,不通的话要开通1099端口。
完整的效果图: