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。
硬核內容我太菜了,我寫不來:
筆者才疏學淺,這個筆記到這兒就結束了。接下來就可以自己寫死鎖代碼、堆內存溢出代碼、棧溢出代碼、多線程代碼等進行內存分析啦。也可以分析線上跑的服務的內存了。