1. 程式人生 > >python功能模組之psutil------ Linux效能(CPU、磁碟、記憶體、網絡卡)監控

python功能模組之psutil------ Linux效能(CPU、磁碟、記憶體、網絡卡)監控

採集系統的基本效能資訊包括CPU、記憶體、磁碟、網路等,可以完整描述當前系統的執行狀態及質量。psutil模組已經封裝了這些方法,使用者可以根據自身的應用場景,呼叫相應的方法來滿足需求,非常簡單實用。 (1)CPU資訊 Linux作業系統的CPU利用率有以下幾個部分: User Time,執行使用者程序的時間百分比; System Time,執行核心程序和中斷的時間百分比; Wait IO,由於IO等待而使CPU處於idle(空閒)狀態的時間百分比; Idle,CPU處於idle狀態的時間百分比。 我們使用Python的psutil.cpu_times()方法可以非常簡單地得到這些資訊,同時也可以獲取CPU的硬體相關資訊,比如CPU的物理個數與邏輯個數,具體見下面的操作例子: >>> import psutil >>>psutil.cpu_times()#使用cpu_times方法獲取CPU完整資訊,需要顯示所有邏輯CPU資訊, >>>#指定方法變數percpu=True即可,如psutil.cpu_times(percpu=True) scputimes(user=38.039999999999999, nice=0.01, system=110.88, idle=177062.59, iowait=53.399999999999999, irq=2.9100000000000001, softirq=79.579999999999998, steal=0.0, guest=0.0) >>>psutil.cpu_times().user    #獲取單項資料資訊,如使用者user的CPU時間比 38.0 >>>psutil.cpu_count()    #獲取CPU的邏輯個數,預設logical=True4 >>>psutil.cpu_count(logical=False)    #獲取CPU的物理個數 2 >>> (2)記憶體資訊 Linux
系統
的記憶體利用率資訊涉及total(記憶體總數)、used(已使用的記憶體數)、free(空閒記憶體數)、buffers(緩衝使用數)、cache(快取使用數)、swap(交換分割槽使用數)等,分別使用psutil.virtual_memory()與psutil.swap_memory()方法獲取這些資訊,具體見下面的操作例子: >>> import psutil >>>mem = psutil.virtual_memory()   #使用psutil.virtual_memory方法獲取記憶體完整資訊 >>>mem svmem(total=506277888L, available=204951552L, percent=59.5, used=499867648L, free=6410240L, active=245858304, inactive=163733504, buffers=117035008L, cached=81506304) >>>mem.total    #獲取記憶體總數 506277888L >>>mem.free     #獲取空閒記憶體數 6410240L >>>psutil.swap_memory()    #獲取SWAP分割槽資訊sswap(total=1073733632L, used=0L, free=1073733632L, percent=0.0, sin=0, sout=0) >>> (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()獲取,具體見下面的操作例子: >>>psutil.disk_partitions()    #使用psutil.disk_partitions方法獲取磁碟完整資訊 [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw'), sdiskpart(device='/dev/sda3', mountpoint='/data', fstype='ext4', opts='rw')] >>> >>>psutil.disk_usage('/')  #使用psutil.disk_usage方法獲取分割槽(引數)的使用情況 sdiskusage(total=15481577472, used=4008087552, free=10687057920, percent=25.899999999999999) >>> >>>psutil.disk_io_counters()    #使用psutil.disk_io_counters獲取硬碟總的IO個數、                    #讀寫資訊 sdiskio(read_count=9424, write_count=35824, read_bytes=128006144, write_bytes=204312576, read_time=72266, write_time=182485) >>> >>>psutil.disk_io_counters(perdisk=True)  #“perdisk=True”引數獲取單個分割槽IO個數、                              #讀寫資訊 {'sda2': sdiskio(read_count=322, write_count=0, read_bytes=1445888, write_bytes=0, read_time=445, write_time=0), 'sda3': sdiskio(read_count=618, write_count=3, read_bytes=2855936, write_bytes=12288, read_time=871, write_time=155), 'sda1': sdiskio(read_count=8484, write_count=35821, read_bytes=123704320, write_bytes=204300288, read_time=70950, write_time=182330)} (4)網路資訊 系統的網路資訊與磁碟IO類似,涉及幾個關鍵點,包括bytes_sent(傳送位元組數)、bytes_recv=28220119(接收位元組數)、packets_sent=200978(傳送資料包數)、packets_recv=212672(接收資料包數)等。這些網路資訊使用psutil.net_io_counters()方法獲取,具體見下面的操作例子: >>>psutil.net_io_counters()    #使用psutil.net_io_counters獲取網路總的IO資訊,默                                #認pernic=False snetio(bytes_sent=27098178, bytes_recv=28220119, packets_sent=200978, packets_recv=212672, errin=0, errout=0, dropin=0, dropout=0) >>>psutil.net_io_counters(pernic=True)  #pernic=True輸出每個網路介面的IO資訊{'lo': snetio(bytes_sent=26406824, bytes_recv=26406824, packets_sent=198526, packets_recv=198526, errin=0, errout=0, dropin=0, dropout=0), 'eth0': snetio(bytes_sent=694750, bytes_recv=1816743, packets_sent=2478, packets_recv=14175, errin=0, errout=0, dropin=0, dropout=0)} >>> (5)其他系統資訊 除了前面介紹的幾個獲取系統基本資訊的方法,psutil模組還支援獲取使用者登入、開機時間等資訊,具體見下面的操作例子: >>>psutil.users()    #使用psutil.users方法返回當前登入系統的使用者資訊 [suser(name='root', terminal='pts/0', host='192.168.1.103', started=1394638720.0), suser(name='root', terminal='pts/1', host='192.168.1.103', started=1394723840.0)] >>> import psutil, datetime >>>psutil.boot_time()    #使用psutil.boot_time方法獲取開機時間,以
Linux
時間戳格式返回 1389563460.0 >>>datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")

'2014-01-12 22:51:00'    #轉換成自然時間格式

官方文件參考一下路徑:官方文件