监视本地Java进程
jdk9及以后没有visualvm工具
visualvm下载
visualvm插件下载
点击install安装
VisualVM也可以处理.hprof文件
监控远程Tomcat
修改Catalina.sh
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9090
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Diava.net.preferlPv4Stack=true
-Djava.rmi.server.hostname=47.101.156.180"
监控普通的JAVA进程
nohup java -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9090
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Diava.net.preferlPv4Stack=true
-Djava.rmi.server.hostname=47.101.156.180 -jar demo.jar &
报错
Error: Password file not found: /opt/java/jdk8/jre/lib/management/jmxremote.password
JVisualVM无法连接阿里云的主机怎么办?
假如启动参数如下:
nohup java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=远程主机的外网IP -jar monitor_tuning.jar &
1.确认下jmx的端口是否启动,
命令行执行:netstat –nap | grep 9005
如果没有输出,则说明端口没有启动,查看nohup.out的日志找原因。
2.确认远程主机的ip地址,如果是阿里云,要填写外网的ip地址,而不是内网的ip地址。
3.如果端口已经启动,ip地址也正确,在ECS的安全组,需要开放jmx相关的端口,不仅仅是9005,还有2个随机端口,使用以下命令来查找这几个端口:
首先:ps –ef | grep java
(或者jps -l
)找到进程的pid,然后:netstat –nap | grep pid
找到进程相关的端口,如下图,则需要开放:9005 36333 34502这三个端口。
4.在本机可以开一个telnet客户端来验证这几个端口是否打开
telnet ip port