Java web应用性能分析之【java进程问题分析概叙】-CSDN博客
Java web应用性能分析之【java进程问题分析工具】-CSDN博客
前面整理了java进程问题分析和分析工具,现在可以详细看看jvisualvm的使用,一般java进程都是部署云服务器,或者托管IDC机房。手里有一台阿里云主机,刚好用来做实验。配置jvisualvm连接阿里云主机,分为两步。
1.配置jmxremote
-Djava.rmi.server.hostname=39.99.211.248 阿里云主机这个公网ip一定要显示加上去
-Dcom.sun.management.jmxremote 启用jmxremote
-Dcom.sun.management.jmxremote.port=8899 jmx远程连接时使用的端口,设置成任意未被占用的端口即可
-Dcom.sun.management.jmxremote.rmi.port=8899
-Dcom.sun.management.jmxremote.authenticate=true 否需要身份认证,设置为false不需要用户名和密码
-Dcom.sun.management.jmxremote.ssl=false 是否使用ssl,ssl是一个通信加密的安全协议,不启用
-Dcom.sun.management.jmxremote.password.file=/usr/local/soft/jmxremote.password 登录密码
-Dcom.sun.management.jmxremote.access.file=/usr/local/soft/jmxremote.access 登录账号
如果设置为true则需要额外配置以下2个参数
Dcom.sun.management.jmxremote.access.file:access文件
[root@phost ~]# vim /usr/local/soft/jmxremote.access //任意目录下创建access文件
zhouxx readwrite //格式为: 用户名 (空格)权限
Dcom.sun.management.jmxremote.access.file:密码文件
[root@phost ~]# vim /usr/local/soft/jmxremote.password //创建密码文件
zhouxx 123456 //格式为: 用户名 (空格) 密码
java进程的jvm参数配置示例:
JAVA_OPTS=" -server -Dfile.encoding=UTF-8 -Djava.rmi.server.hostname=39.99.211.248 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8899 -Dcom.sun.management.jmxremote.rmi.port=8899 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=/usr/local/soft/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/usr/local/soft/jmxremote.access -Dapp.config=/home/web/demo/application.yaml -Xms64m -Xmx64m -Xmn64m -Xss1m -XX:MetaspaceSize=16m -XX:MaxMetaspaceSize=64m -XX:+UseConcMarkSweepGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintCommandLineFlags -Xloggc:log/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=log/"
JAVA_OPTS=" -server -Dfile.encoding=UTF-8 -Djava.rmi.server.hostname=39.99.211.248 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8899 -Dcom.sun.management.jmxremote.rmi.port=8899 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=/usr/local/soft/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/usr/local/soft/jmxremote.access -Dapp.config=/home/web/demo/application.yaml -Xms64m -Xmx64m -Xss1m -XX:MetaspaceSize=16m -XX:MaxMetaspaceSize=64m -XX:+UseG1GC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintCommandLineFlags -Xloggc:log/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=log/"
java $JAVA_OPTS -jar mydemo-1.0.0-SNAPSHOT.jar
2.开端口:开阿里云端口和服务器上防火墙端口
2.1开阿里云端口
为什么是全端口开发1-65535,而不是只开8899端口?
因为jmx不仅仅只启用8899端口,还会随机再起一个端口,如当前15641进程还开启了45919,这个端口不固定,所以只能针对117.147.118.199客户端全开放。
2.2 ubuntu的防火墙端口:ufw allow from 117.147.118.199
3.jvisualvm远程连接服务器上的java进程,监控java进程状态
基本参数信息,相当于jps和jinfo
监控cpu、堆内存、元空间、类加载、线程等信息
线程信息:相当于jstack,也可以导出线程dump文件
抽样器:相当于jstack、jmap、jhat
快照信息
buffer pool监控
jconsole插件
visual GC:相当于jstat
提示 “不受此jvm支持”
参考:jvisualvm 连接 jstatd 远程监控 jvm 或 Visual GC提示"不受此JVM支持“_虚拟机 jvisualvm 不受此jvm-CSDN博客
Tracer:同样是cpu、堆、元空间、类加载、线程等的监控
4.jvisualvm分析jvm的dump文件
jvisualvm通过分析dump文件,定位oom问题、cpu飙高问题、大内存对象问题等等