zoukankan      html  css  js  c++  java
  • Linux下使用python脚本获取本机CPU,内存,网络使用状态的方法

    如果在日常运维工作中,想要查看某台服务器上的本地CPU,内存,网络使用状态,怎么办?这里介绍使用python脚本获取:

    [root@python2 ~]# cat os.py
    #!/usr/bin/python
    #coding=utf-8
    
    import os
    import time
    import sys
    import atexit
    import psutil
    
    #print "Welcome,current system is",os.name," 3 seconds late start to get data"
    time.sleep(3)
    
    line_num = 1
    
    #function of Get cpu state
    def getCPUstate(interval=1):
        return (" CPU:"+str(psutil.cpu_percent(interval))+"%")
    
    def getMemorystate():
        phymem = psutil.virtual_memory()
        line = "Memory: %5s%% %6s/%s"%(
                phymem.percent,
                str(int(phymem.used/1024/1024))+"M",
                str(int(phymem.total/1024/1024))+"M"
                )
        return line
    def bytes2human(n):
        """
        >>>bytes2human(10000)
        '9.8k'
        >>>bytes2human(100001221)
        '95.4M'
        """
        symbols = ('K','M','G','T','P','E','Z','Y')
        prefix = {}
        for i ,s in enumerate(symbols):
            prefix[s] = 1 << (i+1)*10
        for s in reversed(symbols):
            if n >=prefix[s]:
                value = float(n) / prefix[s]
                return '%.2f %s'%(value,s)
        return '%.2fB'%(n)
    def poll(interval):
        """Retrieve raw stats within an interval window."""
        tot_before = psutil.net_io_counters()
        pnic_before = psutil.net_io_counters(pernic=True)
        #sleep some time
        time.sleep(interval)
        tot_after = psutil.net_io_counters()
        pnic_after = psutil.net_io_counters(pernic=True)
        #get cpu stats
        cpu_state = getCPUstate(interval)
        #get memory
        memory_state = getMemorystate()
        return (tot_before,tot_after,pnic_before,pnic_after,cpu_state,memory_state)
    def refresh_window(tot_before,tot_after,pnic_before,pnic_after,cpu_state,memory_state):
        """print stats on screen"""
        #print current time,cpu state,memory
        print (time.asctime() +" | "+cpu_state+" | "+
                memory_state)
        #total
        print(" NetStates:")
        print(" total bytes:  sent: %-10s received: %s"%(
            bytes2human(tot_after.bytes_sent), 
            bytes2human(tot_after.bytes_recv)))
        print( " total packets:  sent: %-10s received: %s"%(
            tot_after.packets_sent,
            tot_after.packets_recv))
        # per-network interface details: let's sort network interfaces so    
        # that the ones which generated more traffic are shown first
        print( " ")
        nic_names = pnic_after.keys()
        #nic_names.sort(key=lambda x: sum(pnic_after[x]), reverse=True)
        for name in nic_names:
            stats_before = pnic_before[name]
            stats_after = pnic_after[name]
            templ = "%-15s %15s %15s"    
            print(templ % (name, "TOTAL", "PER-SEC"))  
            print(templ % (
                "bytes-sent",    
                bytes2human(stats_after.bytes_sent),  
                bytes2human(stats_after.bytes_sent - stats_before.bytes_sent) +
                '/s', 
                ))
            print(templ % (    
                "bytes-recv",    
                bytes2human(stats_after.bytes_recv),    
                bytes2human(stats_after.bytes_recv- stats_before.bytes_recv)
                + '/s',    
                ))
            print(templ % ( 
                "pkts-sent",
                stats_after.packets_sent,
                stats_after.packets_sent - stats_before.packets_sent,
                ))
            print((templ %(
                "pkts-recv", 
                stats_after.packets_recv,
                stats_after.packets_recv - stats_before.packets_recv,
                )))
            print( " ")
    try:
        interval = 0
        while 1:
            args = poll(interval)
            refresh_window(*args)
            interval = 1
    except (KeyboardInterrupt,SystemExit):
        pass
    

    执行脚本:

    [root@python2 ~]# chmod 755 os.py
    
    [root@python2 ~]# python os.py
    Mon May 20 14:56:57 2019 |  CPU:0.0% | Memory:   6.4%   286M/3790M
     NetStates:
     total bytes:  sent: 18.51 M    received: 245.65 M
     total packets:  sent: 125771     received: 2090611
     
    lo                        TOTAL         PER-SEC
    bytes-sent                0.00B         0.00B/s
    bytes-recv                0.00B         0.00B/s
    pkts-sent                     0               0
    pkts-recv                     0               0
     
    ens192                    TOTAL         PER-SEC
    bytes-sent              18.51 M         0.00B/s
    bytes-recv             245.65 M         0.00B/s
    pkts-sent                125771               0
    pkts-recv               2090611               0
  • 相关阅读:
    经典游戏--24点--c++代码实现和总体思路(简单暴力向)
    这么多TiDB负载均衡方案总有一款适合你
    思杰( Citrix)证书的正确处置方式
    从本质彻底精通Git——4个模型1个周期1个史观1个工作流
    HttpClient客户端网络编程——高可用、高并发
    Netty之数据编码
    维吉尼亚密码加解密原理及其实现
    无网环境安装docker之--rpm
    centos7无网环境安装docker
    CentOS8.3最小化安装后安装GNome桌面
  • 原文地址:https://www.cnblogs.com/kevingrace/p/9953677.html
Copyright © 2011-2022 走看看