python模組psutil擷取系統狀態樣本

來源:互聯網
上載者:User

擷取作業系統的當前運行狀態和負載情況,是一個系統管理員的基本技能,因為這對我們日常排查故障,定位問題有著非常緊密的聯絡,比如查看當前系統的基本資料,例如cpu,記憶體,網路接收包情況,磁碟的使用率等就是我們日常系統管理員經常要關注的內容,既然這些資訊如此重要,那能否每次登陸系統的時候自動給我們展示出來呢,其實解決這個問題很簡單,我們可以寫個指令碼,這個指令碼列印出我們關注的資訊,然後把這個指令碼放到.bashrc裡,這樣每次登陸系統就會自動調用這個指令碼來運行,輸出當前的系統資訊,既然想清楚了,那就動手進入今天的主題,用我們今天的主角python的psutil模組來實現擷取系統狀態, 該模組可以擷取正在啟動並執行進程資訊和系統的CPU及記憶體的利用率,這個模組功能非常強大,另外它還是跨平台的,在其它系統上也能很好的運行,往下我們來看一個實際的例子來展示下如何使用psutil模組:

#!/usr/bin/env python
#coding:utf-8
import psutil
import time
import sys
from optparse import OptionParser
parser = OptionParser() 
parser.add_option("-t", "--time", dest="time",
                  help="此參數可查看當前下載占的頻寬,-t是測試時間", metavar="10") 
parser.add_option("-d", "--deamon",action="store_false", dest="deamon", default=True, 
                  help="後台運行此指令碼")
 
def Sysinfo():
    Boot_Start = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(psutil.boot_time())) 
    time.sleep(0.5)
    Cpu_usage = psutil.cpu_percent()
    RAM = int(psutil.virtual_memory().total/(1027*1024))
    RAM_percent = psutil.virtual_memory().percent
    Swap = int(psutil.swap_memory().total/(1027*1024))
    Swap_percent = psutil.swap_memory().percent
    Net_sent = psutil.net_io_counters().bytes_sent
    Net_recv = psutil.net_io_counters().bytes_recv
    Net_spkg = psutil.net_io_counters().packets_sent
    Net_rpkg = psutil.net_io_counters().packets_recv
    BFH = r'%'
    print " \033[1;32m開機時間:%s\033[1;m"  % Boot_Start
    print " \033[1;32m當前CPU使用率:%s%s\033[1;m" % (Cpu_usage,BFH)
    print " \033[1;32m實體記憶體:%dM\t使用率:%s%s\033[1;m" % (RAM,RAM_percent,BFH)
    print "\033[1;32mSwap記憶體:%dM\t使用率:%s%s\033[1;m" % (Swap,Swap_percent,BFH)
    print " \033[1;32m發送:%d Byte\t發送包數:%d個\033[1;m" % (Net_sent,Net_spkg)
    print " \033[1;32m接收:%d Byte\t接收包數:%d個\033[1;m" % (Net_recv,Net_rpkg)
 
    for i in psutil.disk_partitions():
        print " \033[1;32m盤符: %s 掛載點: %s 使用率: %s%s\033[1;m" % (i[0],i[1],psutil.disk_usage(i[1])[3],BFH)
 
 
def Net_io(s):
    x = 0
    sum = 0
    while True:
        if x >= s:
            break
        r1 = psutil.net_io_counters().bytes_recv
        time.sleep(1)
        r2 = psutil.net_io_counters().bytes_recv
        y = r2 - r1
        print "%.2f Kb/s" % (y / 1024.0)
        sum += y
        x += 1
    result = sum / x
    print "\033[1;32m%s秒內平均速度:%.2f Kb/s \033[1;m"  % (x,result / 1024.0)
if __name__ == "__main__":
    (options, args) = parser.parse_args() 
    if options.time:
        Net_io(int(options.time))
    else:
        Sysinfo()

指令碼運行方式有2種,如果不加參數可以直接輸出當前作業系統資訊,例如:

[root@test demo_script]# python get_sysinfo.py
 開機時間:2015-09-16 15:21:19
 當前CPU使用率:2.0%
 實體記憶體:3991M 使用率:22.2%
Swap記憶體:0M    使用率:0.0%
 發送:47886457797 Byte 發送包數:74127845個
 接收:102287702165 Byte        接收包數:952507264個
 盤符: /dev/xvda1 掛載點: / 使用率: 44.2%

另一種方式是加入-t參數,後面跟一個數字,查看給定秒內的平均網路速度,如下:


[root@test demo_script]# python get_sysinfo.py  -t 10
0.08 Kb/s
0.05 Kb/s
0.04 Kb/s
0.04 Kb/s
0.04 Kb/s
0.04 Kb/s
0.04 Kb/s
0.08 Kb/s
0.04 Kb/s
0.04 Kb/s
10秒內平均速度:0.05 Kb/s
關於psutil模組的更多用法,大家可以查看這個網站http://pythonhosted.org/psutil/,裡面寫的非常詳細。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.