概述
主要是對在分析JVM記憶體溢位所使用到的命令進行匯總、記錄,最近在訪問系統時,發現頁面彈出OutOfMemoryError:unable to create new native thread這個例外,然后就開始各種排查springBoot應用;最后發現是nacos相關執行緒不斷堆積導致的,下面就記錄下本次排查所使用到的一些命令,
排查命令
1、ps -ef | grep java
查詢獲取應用行程pid
2、ps hH p pid | wc -l
查看行程所開啟的執行緒數
3、jstack pid
生成jvm當前時刻的執行緒快照,即當前行程中所有執行緒資訊,獲知定位哪些是堆積的執行緒
目的:幫助定位問題出現的原因,如:長時間停頓、cpu占用率過高、執行緒創建過多等
補充:一般使用該命令在服務器直接列印不太好排查,下面將講述dump的方式,使用工具來分析定位
4、top
查看當前系統cpu/記憶體使用率最高的行程pid
5、top -Hp pid、printf “%x\n” tid、jstack pid| grep -20 [param]
查看行程里面占用最多的資源的執行緒
使用命令printf “%x\n” tid 把執行緒tid轉換成16進制數,得到:param= 執行緒tid十六進制,
使用jstack pid| grep -20 [param]命令查詢定位到具體例外地方

利用記憶體工具MAT分析
在上面使用命令的方式不好定位到具體問題位置的情況下,我們可以使用工具來進行分析
1、jmap
可以輸出所有記憶體中物件的工具,甚至可以將VM 中的heap,以二進制輸出成文本
利用下面命令,匯出二進制檔案
jmap -dump:format=b,file=/tmp/portal_202112181020.dump pid
2、heaphero
可視化記憶體分析工具,是一款簡單的,易用的記憶體分析工具,無需登錄在線生成分析報告
將上面dump檔案直接上傳到heaphero官網進行分析


3、Arthas
Alibaba開源的Java診斷工具
4、jvisualvm
JDK自帶的可視化分析工具,
不過當時排查使用來看執行緒堆積資訊的時候,個人感覺不夠清晰,不太好定位,只是列了堆積的執行緒,沒看到執行緒統計匯總資訊(也許是我還沒發現)
,,,,,未完待續 by wus 2021/12/19 11:30
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/387063.html
標籤:其他
