如何獲得線程的堆棧信息厌殉?
線上服務(wù)器cpu 100%了粱挡,該如何排查問題钮科?
1.top命令查詢哪個(gè)pid進(jìn)程占用cpu高(ps -ef|grep java 獲取PID號(hào))
2.通過 top -Hp pid 可以查看該進(jìn)程下各個(gè)線程的cpu使用情況,獲取占用cpu高的線程id
3.執(zhí)行命令:printf "%X\n" 線程tid(用于獲取占用cpu高的線程id的16進(jìn)制數(shù))
4.執(zhí)行命令:jstack pid >> pid-cpu.log
5.下載進(jìn)程pid-cpu.log文件
6.在下載完成的文件中退盯,根據(jù)占用cpu高的16進(jìn)制數(shù)據(jù)線程tid查找
cpu 100%怎樣定位
先用top定位最耗cpu的java進(jìn)程 例如: 12430
工具:top或者 htop(高級(jí))
方法:top -c 顯示進(jìn)程運(yùn)行詳細(xì)列表
鍵入 P (大寫P)裤园,按照cpu進(jìn)行排序
然后用top -p 12430 -H 定位到最耗cpu的線程 的ID 例如:12483
工具:top
方法:top -Hp 1865 撤师,顯示一個(gè)進(jìn)程的線程運(yùn)行信息列表
鍵入P (大寫p),線程按照CPU使用率排序
把第二步定位的線程ID拧揽,轉(zhuǎn)成16進(jìn)制剃盾,printf “%x\n” 12483 得到 :30c3
工具:printf
方法:printf “%x\n” 2747
從jstack 輸出的線程快照中找到線程的對(duì)堆棧信息 jstack 12430 |grep 30c3 -A 60 |less
工具:pstack/jstack/grep
方法:jstack 10765 | grep ‘0x2a34’ -C5 --color`