jvisualvm的簡單使用


1、配置啟動參數

1.1 Linux服務器

1.1.1 啟動參數配置

Linux配置部分的內容來自互聯網,文章地址
https://blog.csdn.net/weixin_43073775/article/details/111137770
此處只做摘錄收集,方便自己查看,原文有詳細介紹。可以仔細查看,老手可以掠過。
另一篇很不錯的文章:
https://blog.csdn.net/u012550080/article/details/81605189

在啟動Linux服務器上啟jar包時配置啟動參數,參數如下:

java -Djava.rmi.server.hostname=xxx.xxx.xx.xx -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=xxxxx -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar my.jar

注:

  • 如果有-javaagent參數,把以上參數放到-javaagent之前。
  • hostname為服務器運行的ip,指定的服務器端口號要開放。

1.1.2 關閉防火牆。

如果已經關閉可以忽略。

# 查看防火牆是否開啟
systemctl status firewalld

# 開啟防火牆
systemctl start firewalld

# 關閉防火牆
systemctl stop firewalld

# 永久開放指定某端口
firewall-cmd --zone=public --add-port=80/tcp --permanent

# 命令參數含義:
# -zone:作用域

# -add-port=80/tcp 添加端口,格式:端口/通訊協議
# -permanent 永久生效,沒有此參數后重啟失效

# 永久禁止訪問某端口
firewall-cmd --remove-port=80/tcp --permanent

# 設置開開放/禁止端口后需要重啟防火牆
firewall-cmd --reload


# 查看所有開放的端口號
firewall-cmd --list-ports

1.2 IDEA中配置

在下圖中圈起來的位置添加配置參數:

具體參數如下:

-Djava.rmi.server.hostname=10.7.66.181 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7777 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

:hostname和port含義同上,不過hostname要填本機的ip。

2. 啟動Jvisualvm

這個就只能在windows上進行遠程連接了。

2.1 連接服務器

在Windows的cmd、owershell或Windows terminal上輸入【jvisualvm】。(前提是要配置好了jdk的環境變量)。以Windows terminal為例如圖:


3. 簡單使用

雙擊IDEA的進程,隨便點點,切換到監視,發現有CPU、堆、類、線程等圖形化信息。此時我的機器正在編譯Spring的源碼,所以看到圖中還是有些許變化。

3.1 概述

這里可以看到一些啟動時的JVM參數和系統屬性等信息。還可以看到線程Dump數等保存的信息。

3.2 監視

看到的信息如第一張圖所示。點擊堆Dump按鈕會將當前堆的情況轉儲成dump文件。如下圖所示:

這里可以看到有個名為【ApplicationImpl pooled thread 649】線程正在運行,線程id是【3073】,線程狀態是【TIMED_WAITING】。還可以看到線程詳細的堆棧信息。至於后面的【類】和【實例】等選項卡我就不太清楚,點進去看也沒發現啥。后面再繼續探索。

3.3 線程

線程選項卡就可以顯示當前進程下正在運行的線程。可以根據顏色來分辨各個線程的狀態。點擊右上角的【線程Dump】按鈕可以生成最后一個選項卡【threaddump】的文件,和剛剛的【heapdump】文件一樣,都是在某一時刻的【快照】,記錄了這個時刻的堆和線程的信息。具體如下圖:

還有很多東西我也不知道是什么,知識和經驗尚淺。

3.4 抽樣器

利用抽樣器對CPU進行抽樣。可以點擊【熱點方法】進行排序,也就是會被JIT優化的方法。也可以點擊創建【快照】。

切換到線程CPU時間,可以看到使用cpu時間最長的線程名稱。也可以點擊【增量】將目前的【總量】統計模式切換成增量統計模式。

點擊內存抽樣,可以看到差不多的內容。切換到【每個線程分配】可以看到線程【已分配的內存總字節數】統計,同樣可以切換增量。右邊還可以執行GC和堆dump。


硬核內容我太菜了,我寫不來:

筆者才疏學淺,這個筆記到這兒就結束了。接下來就可以自己寫死鎖代碼、堆內存溢出代碼、棧溢出代碼、多線程代碼等進行內存分析啦。也可以分析線上跑的服務的內存了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM