Jstack排查線上CPU100%
介紹
jstack是JVM自帶的Java堆疊跟蹤工具,用于生成java虛擬機當前時刻的執行緒快照,來幫助定位執行緒出現長時間停頓的原因,例如死鎖、死回圈等,
語法
jstack [options] pid
options:
- -F:to force a thread dump. Use when jstack
does not respond (process is hung),當一個行程掛起時,jstack 命令沒有回應時,強制輸出這個執行緒轉儲資訊, - -m:to print both java and native frames (mixed mode),列印JAVA和包含本地方法的C/C++的堆疊資訊,
- -l:long listing. Prints additional information about locks,列印堆疊資訊,包含鎖的其他資訊,例如死鎖等,
實操
-
找出cpu使用率最高的行程
top -c -
找出CPU使用率最高的行程,查詢該pid行程下的執行緒使用情況
ps -mp 行程id -o THREAD,tid,time -
將執行緒id轉換成16進制
printf "%x\n" tid -
jstack查看相應執行緒的堆疊
jstack 行程id | grep 16進制執行緒id -A 30 # 或者列印到檔案 jstack pid | grep tid >> jstack.txt
擴展
JVM執行緒的幾種狀態
New
新建的執行緒,執行緒還沒啟動,
Runnable
執行緒正在運行或者等待作業系統中的其他資源,例如執行緒運行程序中,系統分配資源給其他操作,此時這個執行緒還是Runnable狀態,可以理解為可運行的執行緒,
Blocked
阻塞狀態,阻塞狀態的執行緒正在等待監視器鎖,在Dump日志中一般顯示為java.lang.Thread.State: BLOCKED
Waiting
等待執行緒,執行緒正在無限期的等待另一個執行緒執行某些特別操作,一般執行緒由于呼叫一下方法會處于等待狀態,
Object.wait // 不帶超時
Thread.join // 不帶超時
LockSupport.park
Time_Waiting
和Waiting類似,但是執行緒等待有時間限制,設定了指定等待時間,一般執行緒由于呼叫一下方法會處于超時等待狀態,
Thread.sleep
Object.wait // 指定超時時間
Thread.join // 指定超時時間
LockSupport.parkNanos
LockSupport.parkUntil
Terminated
終止狀態,
原文鏈接:https://monkey.blog.xpyvip.top/archives/jstack-pai-cha-xian-shang-cpu
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/510847.html
標籤:Java
上一篇:設計模式介紹和單一職責原則
下一篇:AUSTOj4
