2008-09-08 148 views
7

我正在運行一些針對Java進程的JMeter測試,以確定Web應用程序如何響應負載(500多個用戶)。 JMeter會爲每個Web請求提供響應時間,並且我已經編寫了一個腳本來每X秒對Tomcat管理器進行ping操作,這將使我獲得當前JVM堆的大小。在shell腳本中獲取CPU使用情況?

我想收集服務器上Tomcat使用的CPU百分比的統計信息。我試圖做到這一點,使用ps這樣的shell腳本:

PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID` 

...運行命令每隔X秒,將結果追加到一個文本文件中。 (對於想知道的人,pmem =%mem使用率和nlwp是線程數)

但是我發現這給出了「CPU使用率%」的不同定義 - 根據我的需要 - 根據manpages ps,pcpu定義爲:

「##。#」格式的進程的CPU利用率。它使用的CPU時間除以進程運行的時間(cputime/realtime ratio),以百分比表示。

換句話說,pcpu給我用於該方法的壽命過程中的%的CPU利用率。

因爲我要帶樣品每X秒,我想可以在當前時間僅收集過程中的CPU利用率 - 類似於top會給我 (進程的CPU利用率,因爲最後更新)。

如何從shell腳本中收集此信息?

回答

13

使用top -b(和其他開關,如果你想要不同的輸出)。它只會轉儲到stdout而不是跳入curses窗口。

2

關閉我的頭頂,我會使用系統狀態的/ proc文件系統視圖 - 查看man 5 proc查看/ proc/PID/stat條目的格式,其中包含total CPU使用率信息,並使用/ proc/stat來獲取全局系統信息。要獲得「當前時間」的用法,您可能確實是指「最近N秒鐘使用的CPU」;分開一小段距離取兩個樣本來查看當前的CPU消耗率。然後,您可以將這些值嵌入到有用的東西中。實際上,這可能比純shell腳本更像Perl/Ruby/Python作業。

您可能可以使用/ proc/PID/status獲取粗略數據,從而得出該進程的平均睡眠時間。雖然相當粗糙的數據。

5

我發現在執行測試(如JMeter)時監控服務器最有用的工具是dstat。它不僅爲您提供了一系列來自服務器的統計數據,還將其輸出到csv以便輕鬆導入到電子表格中,並允許您使用Python編寫的模塊擴展該工具。

+0

感謝dstat工具! – 2009-04-17 05:00:57

0

也使用1作爲迭代計數,因此您將獲得當前快照,而不用等待在延遲時間內獲得另一個快照。

top -b -n 1 
4

用戶負載:top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $2}' |sed 's/.[^.]*$//' 系統負載:top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $3}' |sed 's/.[^.]*$//' 空載:top -b -n 1 |grep Cpu |tail -n 1 |awk '{print $5}' |sed 's/.[^.]*$//'

每一個結果是一個圓形的小數。