使用 jvisualvm 遠端監控服務 JVM (jmx+jstatd)方法(k8s容器版)

Yark發表於2021-12-08

應用伺服器端的配置

對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: 我愛小硯 乀(ˉεˉ乀)

相關文章