zoukankan      html  css  js  c++  java
  • Linux服务器CPU、内存、磁盘空间、负载情况查看python脚本

    [本文出自天外归云的博客园]

    网上搜,东拼西凑,组装了一个可以查Linux服务器CPU使用率、内存使用率、磁盘空间占用率、负载情况的python脚本。

    脚本内容如下:

    # -*- coding:utf-8 -*- - 
    import os, time
    
    last_worktime=0
    last_idletime=0
    
    def get_cpu():
            global last_worktime, last_idletime
            f=open("/proc/stat","r")
            line=""
            while not "cpu " in line: line=f.readline()
            f.close()
            spl=line.split(" ")
            worktime=int(spl[2])+int(spl[3])+int(spl[4])
            idletime=int(spl[5])
            dworktime=(worktime-last_worktime)
            didletime=(idletime-last_idletime)
            rate=float(dworktime)/(didletime+dworktime)
            last_worktime=worktime
            last_idletime=idletime
            if(last_worktime==0): return 0
            return rate
    
    def get_mem_usage_percent():
        try:
            f = open('/proc/meminfo', 'r')
            for line in f:
                if line.startswith('MemTotal:'):
                    mem_total = int(line.split()[1])
                elif line.startswith('MemFree:'):
                    mem_free = int(line.split()[1])
                elif line.startswith('Buffers:'):
                    mem_buffer = int(line.split()[1])
                elif line.startswith('Cached:'):
                    mem_cache = int(line.split()[1])
                elif line.startswith('SwapTotal:'):
                    vmem_total = int(line.split()[1])
                elif line.startswith('SwapFree:'):
                    vmem_free = int(line.split()[1])
                else:
                    continue
            f.close()
        except:
            return None
        physical_percent = usage_percent(mem_total - (mem_free + mem_buffer + mem_cache), mem_total)
        virtual_percent = 0
        if vmem_total > 0:
            virtual_percent = usage_percent((vmem_total - vmem_free), vmem_total)
        return physical_percent, virtual_percent
    
    def usage_percent(use, total):
        try:
            ret = (float(use) / total) * 100
        except ZeroDivisionError:
            raise Exception("ERROR - zero division error")
        return ret
    
    statvfs = os.statvfs('/')
    
    total_disk_space = statvfs.f_frsize * statvfs.f_blocks
    free_disk_space = statvfs.f_frsize * statvfs.f_bfree
    disk_usage = (total_disk_space - free_disk_space) * 100.0 / total_disk_space
    disk_usage = int(disk_usage)
    disk_tip = "硬盘空间使用率(最大100%):"+str(disk_usage)+"%"
    print(disk_tip)
    
    mem_usage = get_mem_usage_percent()
    mem_usage = int(mem_usage[0])
    mem_tip = "物理内存使用率(最大100%):"+str(mem_usage)+"%"
    print(mem_tip)
    
    cpu_usage = int(get_cpu()*100)
    cpu_tip = "CPU使用率(最大100%):"+str(cpu_usage)+"%"
    print(cpu_tip)
    
    load_average = os.getloadavg()
    load_tip = "系统负载(三个数值中有一个超过3就是高):"+str(load_average)
    print(load_tip)

    在Linux服务器上touch一个py文件,把以上内容粘贴进去并保存。运行python脚本,效果如下:

    一目了然。以后再出现访问后台接口502、无返回的情况,在后台服务器执行一下脚本,看看是不是这方面引起的问题,是不是内存占用过高,是不是磁盘满了等等。方便后台服务器环境问题的定位,以便联系相关的开发或运维来协助解决问题。

  • 相关阅读:
    ubuntu16.04安装jdk1.8(java1.8)
    OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
    Eclipse 的 jsp 页面代码格式化
    php自动加载
    swift 遍历
    swift 赋值判断
    C语言开发环境配置
    C语言之分配
    C语言之指针
    IOS之swift第一课基础代码
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/6913833.html
Copyright © 2011-2022 走看看