使用 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

:small_orange_diamond: :triangular_flag_on_post: 注意: 在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展示界面

image-20210416171934282

添加jstatd和JMX连接

右键点击“远程”–> “添加远程主机”(输入192.168.10.133) –>“高级设置”(jstatd端口设置为10003)–>确定
右键点击 “192.168.10.133主机“ –> “添加JMX连接” –> 输入连接信息(添加端口 100001)–> 确定

image-20210416172107008

主界面和抽样器界面展示

image-20210416172225683

开始记录后访问业务使其产生记录数据

eg: 点击如图所示 “CPU” 开始记录,然后就不停通过多租户域名访问virgo-tomcat中部署的业务模块使其产生监控数据

image-20210416172301853

image-20210416172801593

快照功能

可以拍摄“快照”,保存这一时间段的监控数据,并通过 “组合” 查看方法的调用过程

拍摄“快照”

image-20210416172959233

visual Gc 观测展示

gcview

问题诊断相关参考

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 协议》,转载必须注明作者和本文链接
:kissing_closed_eyes: 我爱小砚 乀(ˉεˉ乀)
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!