2015-12-05 35 views
1

我需要計算給定服務器上多個進程的CPU使用率。 很少的選項,如下計算Linux中多個進程的CPU使用率的有效方法

一)雖然我們可以用PS找到進程的CPU佔用率,PS給出了過程的CPU使用率在其生命週期,而不是爲了instant.Of當然,當我的意思即時我的意思是一些小的特定時期,比如1秒左右,因爲在任何時候cpu都被一個進程使用或不被使用。

b)vmstat不顯示進程明智的cpu使用情況。

c)我們可以使用top來查找進程的CPU使用情況。

top -b -n 2 -d 1 | grep'mysqld'| tail -n 1

對於n = 1,top命令的行爲更像ps,其中提供了自啓動以來的進程的CPU使用情況,因此使用n = 2並忽略尾部的第一行將會使CPU瞬間。

https://superuser.com/questions/609949/what-are-the-methods-available-to-get-the-cpu-usage-in-linux-command-line

但忽略了前幾​​行不會與多個grep的字符串(進程名),並在那裏工作,在這個過程中的,因爲他們不斷改變他們的狀態可能不會總是發生在頂部。

top -b -n 2 -d 1 | grep'mysqld \ | apache'| tail -n 1

因此,對多進程執行此操作的一種方法是維護一種映射類型的結構,然後僅對第二次出現的那些進程使用cpu。但不確定這是否有效。每次做一個特定的過程的頂部是不是很明顯,我想或者是一個頂部多個進程的grep相同。

4)頂部內部使用/ proc/stats info,我們可以自己明確地實現這個邏輯。

How to calculate the CPU usage of a process by PID in Linux from C?

哪一個可能是一個更好的選擇嗎?

+0

有人可以說什麼理由來結束這個。我想總結一下所有的方法,看看有沒有更好的方法。當你沒有敏銳地觀察並且我想要的東西也包括在內。有時候,最好是打開你爲什麼要關閉某些東西。也不要根據你所知道的來判斷,因爲會有那些會尋找可能看起來像基本信息的人。 – crackerplace

回答

0

你應該使用/proc,因爲你已經發現了。或者,如果你選擇的語言提供一個,也許使用一些更高級別的圖書館。解析pstop的輸出結果並不會贏得任何東西。您需要的數據全部在/proc中,您只需要小心檢查每個過程的身份隨着時間的推移,以防PID在採集數據時得到回收(在大多數系統中,PID回收不會發生在單純的範圍內秒,所以它是可行的)。

+0

ok.But獲取所有的PID,然後爲每個PID從proc/stats獲取其2個時間點的CPU使用情況,是否需要更多時間,如果我想以秒爲間隔推進這些指標。 – crackerplace

+0

如果我想在linux中這樣做,哪種語言會更好,shell或python或任何其他比如C. – crackerplace

+1

我認爲Python將是一個很好的選擇,至少對於第一個版本。如果碰巧你以後需要更多的速度,你總是可以用C重寫它的一部分。 –

相關問題