天天看點

《Python自動化運維:技術與最佳實踐》一1.1 系統性能資訊子產品psutil

本節書摘來自華章出版社《python自動化運維:技術與最佳實踐》一書中的第1章,第1.1節,作者 (美)neil bergman ,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

相比較而言,使用psutil庫實作則更加簡單明了。psutil大小機關一般都采用位元組,如下:

psutil的源碼安裝步驟如下:

采集系統的基本性能資訊包括cpu、記憶體、磁盤、網絡等,可以完整描述目前系統的運作狀态及品質。psutil子產品已經封裝了這些方法,使用者可以根據自身的應用場景,調用相應的方法來滿足需求,非常簡單實用。

(1)cpu資訊

linux作業系統的cpu使用率有以下幾個部分:

user time,執行使用者程序的時間百分比;

system time,執行核心程序和中斷的時間百分比;

wait io,由于io等待而使cpu處于idle(空閑)狀态的時間百分比;

idle,cpu處于idle狀态的時間百分比。

我們使用python的psutil.cpu_times()方法可以非常簡單地得到這些資訊,同時也可以擷取cpu的硬體相關資訊,比如cpu的實體個數與邏輯個數,具體見下面的操作例子:

(2)記憶體資訊

linux系統的記憶體使用率資訊涉及total(記憶體總數)、used(已使用的記憶體數)、free(空閑記憶體數)、buffers(緩沖使用數)、cache(緩存使用數)、swap(交換分區使用數)等,分别使用psutil.virtual_memory()與psutil.swap_memory()方法擷取這些資訊,具體見下面的操作例子:

(3)磁盤資訊

在系統的所有磁盤資訊中,我們更加關注磁盤的使用率及io資訊,其中磁盤使用率使用psutil.disk_usage方法擷取。磁盤io資訊包括read_count(讀io數)、write_count(寫io數)、read_bytes(io讀位元組數)、write_bytes(io寫位元組數)、read_time(磁盤讀時間)、write_time(磁盤寫時間)等。這些io資訊可以使用psutil.disk_io_counters()擷取,具體見下面的操作例子:

(4)網絡資訊

系統的網絡資訊與磁盤io類似,涉及幾個關鍵點,包括bytes_sent(發送位元組數)、bytes_recv=28220119(接收位元組數)、packets_sent=200978(發送資料包數)、packets_recv=212672(接收資料包數)等。這些網絡資訊使用psutil.net_io_counters()方法擷取,具體見下面的操作例子:

(5)其他系統資訊

除了前面介紹的幾個擷取系統基本資訊的方法,psutil子產品還支援擷取使用者登入、開機時間等資訊,具體見下面的操作例子:

獲得目前系統的程序資訊,可以讓運維人員得知應用程式的運作狀态,包括程序的啟動時間、檢視或設定cpu親和度、記憶體使用率、io資訊、socket連接配接、線程數等,這些資訊可以呈現出指定程序是否存活、資源利用情況,為開發人員的代碼優化、問題定位提供很好的資料參考。

(1)程序資訊

psutil子產品在擷取程序資訊方面也提供了很好的支援,包括使用psutil.pids()方法擷取所有程序pid,使用psutil.process()方法擷取單個程序的名稱、路徑、狀态、系統資源使用率等資訊,具體見下面的操作例子:

(2)popen類的使用

psutil提供的popen類的作用是擷取使用者啟動的應用程式程序資訊,以便跟蹤程式程序的運作狀态。具體實作方法如下: