使用 jvisualvm 远程监控服务 JVM (jmx+jstatd)方法(k8s容器版)
使用 jvisualvm 远程监控服务 JVM (jmx+jstatd)方法(k8s容器版)
应用服务器端的配置
对pod的中运行的服务开启jmx并配置堆溢出记录日志
#jvm参数部分可通过环境变量(JAVA_OPTS)配置,前提时Dockerfile 启动时需引用JAVA_OPTS变量
#注意此处监听10001端口
java
-javaagent:/tools/tingyun-agent-java.jar
-Djava.rmi.server.hostname=192.168.10.133
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.rmi.port=10001
-Dcom.sun.management.jmxremote.port=10001
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/gclog/iot.hprof
-XX:NewRatio=2 -Xms512m -Xmx1792m
-Dspring.profiles.active=prod
-jar demo.jar
#启动命令-jar参数要在最后,否则可能无法开启监控端口
当容器运行起来之后通过webshell开启jstatd服务,jmx和jstatd的另外两个随机端口
#注意此处监听10003端口
nohup /opt/jdk/bin/jstatd -J-Djava.security.policy=jstatd.all.policy -p 10003 -J-Djava.rmi.server.hostname=192.168.10.133 -J-Djava.rmi.server.logCalls=true &
#安装net工具
yum install -y net-tools
#查找随机端口,我的测试时为44517、39038
netstat -tlnp
#tcp 0 0 0.0.0.0:44517 0.0.0.0:* LISTEN 1/java
#tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1/java
#tcp 0 0 0.0.0.0:10001 0.0.0.0:* LISTEN 1/java
#tcp 0 0 0.0.0.0:10003 0.0.0.0:* LISTEN 175/jstatd
#tcp 0 0 0.0.0.0:39038 0.0.0.0:* LISTEN 175/jstatd
注意: 在k8s管理端通过port-forward 转发10001、10003、44517、39038四个端口
#根据pod名称做port-forward,其中ip为k8s集群任意一个节点ip,在jvm参数中也需要将IP配置成k8s集群任意一个节点ip;且两边需保持相同
#kubectl port-forward {pod_name} -n {namespace} --address {与-Djava.rmi.server.hostname相同} 10001:10001
nohup kubectl port-forward docker-iot-api-ciot-blue-78fbb688d7-lgdpz 10001:10001 -n cserver-iot --address 192.168.10.133 &
nohup kubectl port-forward docker-iot-api-ciot-blue-78fbb688d7-lgdpz 10003:10003 -n cserver-iot --address 192.168.10.133 &
nohup kubectl port-forward docker-iot-api-ciot-blue-78fbb688d7-lgdpz 44517:44517 -n cserver-iot --address 192.168.10.133 &
nohup kubectl port-forward docker-iot-api-ciot-blue-78fbb688d7-lgdpz 39038:39038 -n cserver-iot --address 192.168.10.133 &
监控端的操作(Windows)
运行jvisualvm
在cmd中输入jvisualvm命令打开jvisualvm界面或者在jdk的bin目录下打开jmc.exe
添加 visual Gc 插件
blog.csdn.net/shuai825644975/artic...
jvisualvm展示界面
添加jstatd和JMX连接
右键点击“远程”–> “添加远程主机”(输入192.168.10.133) –>“高级设置”(jstatd端口设置为10003)–>确定
右键点击 “192.168.10.133主机“ –> “添加JMX连接” –> 输入连接信息(添加端口 100001)–> 确定
主界面和抽样器界面展示
开始记录后访问业务使其产生记录数据
eg: 点击如图所示 “CPU” 开始记录,然后就不停通过多租户域名访问virgo-tomcat中部署的业务模块使其产生监控数据
快照功能
可以拍摄“快照”,保存这一时间段的监控数据,并通过 “组合” 查看方法的调用过程
拍摄“快照”
visual Gc 观测展示
问题诊断相关参考
blog.csdn.net/mnasd/article/detail...
blog.csdn.net/clypm/article/detail...
www.cnblogs.com/ws1149939228/p/124...
www.cnblogs.com/mlfz/p/11778612.ht...
本作品采用《CC 协议》,转载必须注明作者和本文链接