使用自動化shell指令碼尋找CPU使用的詳細線程資訊,shell指令碼
項目加了些攔截器代碼後,CPU警示,顯示CPU使用率超過100%;
想要尋找到底是哪些代碼消耗的資源過多,從網上找到一篇博文,轉載如下:
http://blog.csdn.net/guixunlong/article/details/8450897
在知道哪個Java進程CPU佔用率過高以後: 1.使用命令 jstack PID 命令列印出CPU佔用過高進程的線程棧,例如jstack 12012 > 12012.txt 2.使用top -H -p PID 命令查看對應進程是哪個線程佔用CPU過高. 比如:
可以看到,線程號為12025的線程佔用cpu很高,接下來就可以在12012.txt中尋找該線程,看它為啥這麼忙了 或者也可以採用ps命令 ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid 來查看繁忙的線程資訊
這個命令的作用,主要是可以擷取到對應一個進程下的線程的一些資訊。 比如你想分析一下一個java進程的一些運行瓶頸點,可以通過該命令找到所有當前Thread的佔用CPU的時間,線程號為tid列。
3.在jstack dump出來的檔案中尋找目錄線程,需要注意的是用16進程數來表示線程號,所以我們可以找12025對應的16進程數2EF9
圖中黃色文字即為線程id值 nid : 對應的Linux作業系統下的tid線程號,也就是前面轉化的16進位數字 tid: 這個應該是jvm的jmm記憶體規範中的唯一地址定位 |
按照博主的步驟,的確找到的詳細的線程資訊(非常感謝博主!)。
只是步驟有些繁瑣,在緊急時刻,分秒必爭,該方法顯然會浪費不少時間。
於是想根據博主的步驟,寫個自動化的指令碼。
經過多次的執行和分析,功夫不負有心人,終於寫出了滿足條件的shell指令碼,
直接調用該指令碼,無需任何參數,即可執行;該指令碼能在筆者工作的各個生產環境中使用。
現將該指令碼內容貼出如下,並在代碼中添加了注釋,供各位參考;該指令碼不一定滿足各種環境,請自行修改。
筆者水平有限,錯誤在所難免。歡迎批評指正。
#!/bin/bash########################################################### 尋找佔用CPU資源過高的線程詳細資料### ### 2014-11-03 allen add###########################################################Step1 列印佔用CPU過高的進程IDtop -b -d3 -n1 -u hotel | awk '/PID/,0' > ./_pid_out.outv_pid=`awk 'NR==2 {print $1}' ./_pid_out.out`#Step2 列印進程中佔用CPU過高的線程IDtop -b -d3 -n1 -H -p $v_pid | awk '/PID/,0' > ./_tid_out.outv_tid=`awk 'NR==2 {print $1}' ./_tid_out.out`#Step3 將線程ID轉為16進位#echo 'ibase=10;obase=16;$v_tid' | bcv_tid16=`printf %x $v_tid`echo "thread id[hexadecimal] is : 0x${v_tid16}"echo ""#Step4 列印CPU佔用過高的進程的線程棧echo "wait 5 seconds, please..."jstack $v_pid > ./_thread_stack.outsleep 5s#Step5 在 _thread_stack.out 中尋找線程執行的具體代碼,列印改行及其之後30行,並高亮顯示匹配內容cat ./_thread_stack.out | grep -n --color=auto -A 30 -i 0x${v_tid16}#cleanrm -rf ./_pid_out.outrm -rf ./_tid_out.out
高分c代碼:每個線程的cpu使用率
zhidao.baidu.com/question/24626798.html?si=1
zhidao.baidu.com/question/34507790.html?si=2
zhidao.baidu.com/question/40315074.html?si=4
Linux多線程佔用CPU 999%
1、防殺毒軟體造成故障
由於新版的KV、金山、瑞星都加入了對網頁、外掛程式、郵件的隨機監控,無疑增大了系統負擔。處理方式:基本上沒有合理的處理方式,盡量使用最少的監控服務吧,者,升級你的硬體配備。
2、驅動沒有經過認證,造成CPU資源佔用100%
大量的測試版的驅動在網上泛濫,造成了難以發現的故障原因。 處理方式:尤其是顯卡驅動特別要注意,建議使用微軟認證的或由官方發布的驅動,並且嚴格核對型號、版本。
3、病毒、木馬造成
大量的蠕蟲在系統內部迅速複製,造成CPU佔用資源率據高不下。解決辦法:用可靠的殺毒軟體徹底清理系統記憶體和本地硬碟,並且開啟系統設定軟體,察看有無異常啟動的程式。經常性更新升級殺毒軟體和防火牆,加強防毒意識,掌握正確的防殺毒知識。
4、控制台—管理工具—服務—RISING REALTIME MONITOR SERVICE點滑鼠右鍵,改為手動。
5、開始->;運行->;msconfig->;啟動,關閉不必要的啟動項,重啟。
6、查看“svchost”進程。
svchost.exe是Windows XP系統的一個核心進程。svchost.exe不單單只出現在Windows XP中,在使用NT核心的Windows系統中都會有svchost.exe的存在。一般在Windows 2000中svchost.exe進程的數目為2個,而在Windows XP中svchost.exe進程的數目就上升到了4個及4個以上。
7、查看網路連接。主要是網卡。
8、查看網路連接
當安裝了Windows XP的電腦做伺服器的時候,收到連接埠 445 上的串連請求時,它將分配記憶體和少量地調配 CPU資源來為這些串連提供服務。當負荷過重的時候,CPU佔用率可能過高,這是因為在工作項目的數目和響應能力之間存在固有的權衡關係。你要確定合適的 MaxWorkItems 設定以提高系統響應能力。如果設定的值不正確,伺服器的響應能力可能會受到影響,或者某個使用者獨佔太多系統資源。
要解決此問題,我們可以通過修改註冊表來解決:在登錄編輯程式中依次展開 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserver ]分支,在右側視窗中建立一個名為“maxworkitems”的DWORD值。然後雙擊該值,在開啟的視窗中鍵入下列數值並儲存退出:
9、看看是不是Windows XP使用滑鼠右鍵引起CPU佔用100%
在資源管理員裡面,當你右鍵點擊一個目錄或一個檔案,你將有可能出現下面所列問題:
任何檔案的拷貝操作在那個時間將有可能停止相應
網路連接速度將顯著性的降低
所有的流輸入/輸出操作例如使用Windows Media Player聽音樂將有可能是音樂失真成因:
當你在資源管理員裡面右鍵點擊一個檔案或目錄的時候,當捷徑功能表顯示的時候,CPU佔用率將增加到100%,當你關閉捷徑功能表的時候才返回正常水平。
解決方案:
方法一:
關閉“為菜單和工具提示使用過渡效果”
1、點擊“開始”--“控制台”
2、在“控制台”裡面雙擊“顯示”
3、在“顯示”屬性裡面點擊“外觀”標籤頁
4、在“外觀”標籤頁裡面點擊“效果”
5、在“效果”對話方塊裡面,清除“為菜單和工具提示使用過渡效果”前面的複選框接著點擊兩次“確定”按鈕。
方法二:
在使用滑鼠右鍵點擊檔案或目錄的時候先使用滑鼠左鍵選擇你的目標檔案或目錄。然後再使用滑鼠右......餘下全文>>