Java執行狀態分析2:獲取執行緒堆疊資訊
阿新 • • 發佈:2019-07-16
Java執行狀態分析2:獲取執行緒堆疊資訊
基本概念
出現記憶體洩漏或者執行緩慢場景,有時候無法直接從業務日誌看出問題時候,需要分析jvm記憶體和執行緒堆疊
執行緒堆疊資訊主要記錄jvm執行緒在某時刻執行緒執行情況,分析執行緒狀態可以跟蹤到程式出問題的地方
記憶體堆疊資訊主要記錄jvm堆中在某時刻物件使用情況,主要用於跟蹤是哪個物件佔用了太多的空間,從而跟蹤導致記憶體洩漏的地方
跟蹤執行緒資訊
檢視當前執行緒數量
actuator
1.x
http://host:port/metrics/threads //當前程序的執行緒數 http://host:port/metrics/threads.daemon //當前程序後臺駐留執行緒數 http://host:port/metrics/threads.peak //當前程序執行緒數峰值
2.x
http://host:port/actuator/metrics/jvm.threads.daemon //當前程序後臺駐留執行緒數
http://host:port/actuator/metrics/jvm.threads.live //當前程序的執行緒數
http://host:port/actuator/metrics/jvm.threads.peak //當前程序執行緒數峰值
sop hystrix 執行緒狀態
http://host:port/sys/hystrix/threads
linux
ps huH p {pid}|wc -l
jstack生成執行緒堆疊
當服務cup飆升或者出問題需要從主機層面定位時候,使用top -c 命令檢視對應哪個程序佔用了過高資源
找到資源佔用高的程序
明確需要定位的程序通過如下命令找到對應的程序id
ps aux|grep {application alias}
接下來通過jstack匯出對應的執行緒堆疊
jstack 對應引數如下
- -m to print both java and native frames (mixed mode)
- -l long listing. Prints additional information about locks
可以通過如下命令定位具體高load執行緒:
查詢程序具體哪個執行緒佔用高load top -Hp {程序pid} thread id為十六進位制格式轉十六進位制值 printf %x {執行緒pid} 指定特定行數堆疊資訊 jstack {程序id}|grep -A 200 {執行緒id}
伺服器執行緒相對較多,檔案大小較大,一般不會考慮在伺服器看,另外這樣查也會導致忽略了一些統計資訊
通過如下命令匯出檔案,下載到本地查
jstack -l {pid} >> {dump-file-path}
如何檢視分析dump