獲取某程序cpu占用有很多方法,比如top命令,ps命令,以及讀取系統檔案(/proc/pid/stat)等等,有時候需要評估某個程式執行過程中的資源占用(例如cpu占用、mem占用),此時可以利用上面的讀取系統檔案方法,準確方便地得到cpu/memory占用資訊
(首先,/proc/self/stat其實就是本程序對應的cpu資訊檔案)
該檔案有很多字段,其中跟cpu占用有關的為:utime、stime、cutime、cstime,他們的含義分別為:某程序在使用者空間消耗的cpu時間片、在核心空間消耗的cpu時間片、 所有已死執行緒在使用者態消耗的cpu時間片、所有已死執行緒在核心態消耗的cpu時間片,他們的單位為jiffies。
jiffies是核心中的乙個全域性變數,用來記錄自系統啟動一來產生的節拍數,在linux中,乙個節拍大致可理解為作業系統程序排程的最小時間片,不同linux核心可能值有不同,通常在1ms到10ms之間
關於jiffies,請參考:linux核心中的jiffies及其作用介紹及jiffies等相關函式詳解(好文)
這裡有個問題,1 tick等於幾毫秒?貌似linux kernel 4.x版本還是等於10ms?按理說應該等於1ms才對。。。還是說程式裡可以設定這個值?
程序的總cpu時間processcputime = utime + stime + cutime + cstime,該值包括其所有執行緒的cpu時間。
參考:移動端測試===proc系列之—/proc/pid/stat 如何準確取cpu的值
參考: how to calculate cpu usage -/proc/stat vs top(好文)
本質他們是一樣的,都是獲取某程序在某段時間內消耗的cpu節拍(tick)數量,除以該段時間內cpu總的tick數量。但是很多人top命令引數用的不對,導致結果有差異:正確用法需要指定-n2(迭代兩次)以及-d 1(例如:設定取樣間隔為1s,若不指定top預設採用3s的取樣間隔)
在多核心的計算機中,多執行緒程式的cpu使用率可能會超過100%,因為他還將利用處理器的其他核心,使得總cpu利用率超過100%
linux下獲取占用CPU資源最多的10個程序
linux下獲取占用cpu資源最多的10個程序,可以使用如下命令組合 ps aux head 1 ps aux grep v pid sort rn k 3 head linux下獲取占用記憶體資源最多的10個程序,可以使用如下命令組合 ps aux head 1 ps aux grep v pid...
Linux c獲取CPU佔用率
第一步 檢視 proc stat 這裡面統計的是cpu的資訊。第一行是所有cpu的統計資訊。我們需要前4個數字 cpu 130216 19944 162525 1491240 3784 24749 17773 0 0 0前四位分別表示 user,nice,system,idle 將他們相加得到tot...
linux檢視占用cpu最高的程序
linux 檢視占用 cpu最高的程序 psaux head 1 psaux grep v pid sort rn k 3 head 或者top 然後按下m,注意這裡是大寫 linux 檢視占用記憶體最高的程序 psaux head 1 psaux grep v pid sort rn k 4 he...