快過年了,最后兩天的作業量相對來說少了很多,于是抽空學了一下Linux相關的基礎命令,
才子白問:學了啥子東西,分享一下唄!
成子:學了基礎的Linux命令,跟你分享,你聽得懂嘛?
才子白:那我考考你,假如你發現測驗服務器一個java行程cpu負載占用很高,如何用命令去排查具體是哪行代碼引起的呢?
成子怯生生的問了一句:我可以百度嗎?
- 1、首先查看系統資源占用資訊,top看一下

top命令下按數字1,就可以看到CPU的核數,如果發現CPU占用率很高的,那么問題肯定出在這個程式中(據某人說,按數字1的話,電腦會爆炸喔!)
- 然后通過ps -mp pid -o THREAD,tid,time命令,來查看這個程式的執行緒資訊、tid代碼執行緒ID以及執行緒已經運行的時間,
![]()
但是發現,使用用戶為root權限的PID的時候,運行ps -mp命令的話,資料并不會出來,只出現表頭,于是,使用service用戶的PID:

然后,我們又發現了一個問題,cpu都是為0的,壓根沒有任何一點起伏,
故而,我們用了一個簡化版的命令:top -H -p 599,通過這個命令,看到的都是599行程下面的執行緒

將排在第一位的pid當作tid,也就是printf "%x\n" 1423,這個操作是把八進制的語言轉換為十六進制的,方便下面在jstack進行查找,
- jstack查看行程資訊:可以用jstack pid | grep xxx -A 10
這里的話,即jstack 599 | grep 599 -A 10(這里有個值得注意的地方就是,假如你最開始是root權限,運行這條命令的之前,需要用su service命令來切換用戶)

好了,以上的操作就可以解答才子白的問題了,
假如作業中出現了cpu占用高的行程(表象一般都是請求服務超時),你們就可以用這個方法嘗試去定位下,當然,如果你有代碼權限,還可以看著是哪行代碼,直接截圖丟給開發,開發會覺得你很專業,不過,還是給開發留點面子吧,到這一步的話,就可以的啦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258839.html
標籤:其他
上一篇:vim.plug安裝和用法
下一篇:vscode配置C/C++環境
