2010-08-24 147 views
4

我有一個web服務器,我目前正在爲CPU使用率進行基準測試。我在做什麼本質上是一個運行過程踩住與請求的服務器,然後運行以下bash腳本來確定CPU使用率:有沒有辦法以編程方式獲得PS輸出?

#! /bin/bash 

for ((;;)) 
do 

    echo "`python -c 'import time; print time.time()'`, `ps -p $1 -o '%cpu' | grep -vi '%CPU'`" 
    sleep 5 
done 

這將是很好能夠做到這一點在Python,所以我可以在一個腳本中運行而不必運行兩個腳本。我似乎無法找到任何獨立於平臺的獨立平臺(或至少平臺獨立於Linux和OS X)的方式來獲取Python中的ps輸出,而無需實際啓動另一個進程來運行該命令。我可以做到這一點,但它會是真的很好,如果有這樣做的API。

有沒有辦法做到這一點,或者我將不得不啓動外部腳本?

+1

啓動子進程有什麼問題?這就是你的shell腳本所做的。它每次通過循環啓動一堆進程。至少有3個獨立的進程,可能是4.將其減少到1有什麼問題? – 2010-08-24 17:37:59

+0

我會說5個處理程序之一,用於python的第二個回聲,第三個針對ps第四個針對grep,第五個針對睡眠 – 2010-08-24 17:46:29

+0

@ S.Lott - 這不是一個不想啓動太多進程的問題,因爲Python代碼對我來說更容易推理而不是使用shell程序。 – 2010-08-24 18:01:12

回答

3

你可以看看this關於使用Python解析ps輸出的問題。

其中一個答案建議使用PSI python模塊。雖然這是一個擴展,所以我不知道你是多麼適合。

這也表明在如何的問題,你可以使用python :)

+0

PSI模塊已移至此處:https://bitbucket.org/chrismiles/psi/wiki/Home – Mausy5043 2015-10-11 11:08:07

1

叫PS子可以查詢CPU使用率與PySNMP。這具有能夠從遠程計算機進行測量的額外好處。就此而言,您可以安裝Zenoss或其親屬的虛擬機,並讓它爲您執行監控。

3

我的偏好是做這樣的事情。

collection.sh

for ((;;)) 
do 
    date; ps -p $1 -o '%cpu' 
done 

然後運行collection.sh >someFile同時將你 「與請求踩住服務器」。

然後在服務器砰的一聲之後殺掉這個collection.sh操作。最後,你會得到日期戳和CPU值的日誌文件。

analysis.py

import datetime 
with("someFile", "r") as source: 
    for line in source: 
     if line.strip() == "%CPU": continue 
     try: 
      date= datetime.datetime.strptime(line, "%a %b %d %H:%M:%S %Z %Y") 
     except ValueError: 
      cpu= float(line) 
      print date, cpu # or whatever else you want to do with this data. 
+1

+1有趣的使用直接引用。砰! – jathanism 2010-08-24 18:05:06

1

,如果你不希望調用PS那麼你爲什麼不使用/ proc文件system.I試圖想你可以寫你的Python程序並且讀取/ proc文件中的文件系統並提取你想要的數據。我使用perl編寫了perl腳本中的內聯C代碼。我認爲你可以在python中找到類似的方法。我認爲它是可行的,但你需要通過/ prof文件系統並需要弄清楚你想要什麼以及如何獲得它。 http://www.faqs.org/docs/kernel/x716.html 上面的URL可能會提供一些初始推送。

+1

問題在於linux是特定的。它不適用於OS X. – 2010-08-27 20:34:41

相關問題