利用Linux腳本+命令查看線程統計信息

最近在項目上寫了個用於並行計算的線程池工具,遇到了性能瓶頸,於是求助檢測軟件nmon試圖觀察線程的統計數據。可惜nmon的信息粒度太大,無法滿足需求。

後來發現神奇的Linux下的/proc目錄查看具體的線程統計數據,在目錄 /proc/PID/stat下面可以找到關於線程的絕大部分詳細信息,可惜這個文件的客戶體驗太差,居然是一大堆以空格分割的純數據,汗-_-…….無奈之下只好手動寫了個簡單的腳本,利用shell+awk弄出個小工具來簡單檢測線程狀態,先上效果圖:
這裏寫圖片描述

awk是一個非常強大的文本處理工具,可以把它看作一門小的腳本語言。其實完成這個小工具可以還用其他的工具實現,但awk的以“行”爲單位的處理方式在這個特殊的數據格式中很有幫助。/proc/pid/stat中的數據是以空格作爲分隔符隔離開每個數據的,所以awk在這裏大有用武之地。
思路很簡單:
用SHELL命令控制讀入對應的/proc/pid/stat,然後用awk進行文件格式化輸出
由於臨時需要馬上學的shell和awk腳本,所以代碼寫的很不好看
上代碼:
.sh文件

#Please replace PID according your wish
while :
do 
cat /proc/PID/stat | awk -f stat_awk_script
sleep 1
done

stat_awk_script部分代碼:

{
printf "=======================GET THREAD STAT===================\n"
printf " PID: %-15s MODULE_NAME:%-15s TASK_STATE:%-15s \n",$1,$2,$3
printf " PPID:%-15s PGID:%-22s SID:%-15s \n",%4,$5,$6
printf " TTY_NR%-13s TTY_PGRP:%-18s TASK_FLAGS:%-15s",$7,$8,$9
.....
}

如有有別的現成工具可以滿足觀察線程各種統計數據,請告訴我……直覺上,我覺得我已經在重複造輪子了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章