CPU内存每月的平均使用率

本文介绍了一个用于获取过去两个月内系统CPU和内存平均使用情况的API实现方案。通过查询特定的历史数据表,该API能够收集并返回指定时间段内的系统资源利用率数据。
def add_months(sourcedate, months):
        month = sourcedate.month - 1 + months
        year = int(sourcedate.year + month / 12)
        month = month % 12 + 1
        day = min(sourcedate.day, calendar.monthrange(year, month)[1])
        return datetime.date(year, month, day)




class cpumem_api():
    def get(self):
        self.set_header("Content-Type", "application/json")
        # this_time = add_months(datetime.datetime.today(), -2)
        # years = this_time.strftime('%Y')
        # month = this_time.strftime('%m')
        # index = int(int(month) - 1)
        # for this_month in month_list:
        #     this_month = month_list[index]
        #     index = index + 1


        today = datetime.datetime.today()
        this_list = []
        month_count = 0
        while month_count < 2:
            day = today - relativedelta(months=month_count)
            this_list.append(day.strftime('%Y%m'))
            month_count += 1
        results = {}
        cpus = []
        mems = []
        for item in this_list:
            sql = """
               SELECT avg(sy+us+id) FROM  his_cpu_mon_%s
            """ % item
            cpu = list(self.pg.db.query(sql))
            cpus.append(apu)
            sql = """
               SELECT avg(us) FROM  his_mem_mon_%s
            """ % item
            mem = list(self.pg.db.query(sql))
            mems.append(mem)
        results['cpus'] = cpus
        results['mems'] = mems
        data = json.dumps({"data": results}, cls=public_bz.ExtEncoder)
        self.write(data)
在Linux系统中,可借助不同工具计算CPU内存、存储前三个平均使用率。 ### CPU前三个平均使用率 可使用`sar`命令获取历史CPU使用率数据,`sar`是System Activity Reporter的缩写,是sysstat软件包的一部分,能从历史数据文件中读取并显示过去数据,包括CPU使用情况 [^2]。 - 查看系统是否安装`sysstat`: ```bash rpm -qa | grep sysstat ``` - 若未安装,使用以下命令安装: ```bash yum install sysstat -y # CentOS、RHEL系统 apt-get install sysstat -y # Debian、Ubuntu系统 ``` - 读取前三个CPU使用率历史数据,并计算平均使用率: ```bash sar -u -f /var/log/sa/sa$(date -d '3 months ago' +%d) | awk 'NR > 3 && /^[0-9]/ {sum+=$3; count++} END {if (count > 0) print "Average CPU idle: " sum/count "%"; else print "No data available."}' ``` 其中,`sar -u -f`用于指定读取特定日期的CPU使用率数据,`awk`用于处理数据并计算平均值。 ### 内存前三个平均使用率 同样可借助`sar`命令获取内存使用率历史数据。 - 读取前三个内存使用率历史数据,并计算平均使用率: ```bash sar -r -f /var/log/sa/sa$(date -d '3 months ago' +%d) | awk 'NR > 3 && /^[0-9]/ {sum+=$3; count++} END {if (count > 0) print "Average memory utilization: " sum/count "%"; else print "No data available."}' ``` 这里,`sar -r -f`用于指定读取特定日期的内存使用率数据,`awk`用于处理数据并计算平均值。 ### 存储前三个平均使用率 可使用`df`命令获取磁盘使用信息,不过`df`没有直接保存历史数据的功能,需结合日志记录脚本。 - 编写脚本记录磁盘使用信息: ```bash #!/bin/bash df -h | grep '/dev/sda' | awk '{print $5}' | sed 's/%//' >> /var/log/disk_usage.log ``` 将上述脚本保存为`disk_usage.sh`,并添加执行权限: ```bash chmod +x disk_usage.sh ``` - 设置定时任务,每小时执行一次脚本: ```bash crontab -e ``` 在打开的文件中添加以下内容: ```plaintext 0 * * * * /path/to/disk_usage.sh ``` - 计算前三个磁盘平均使用率: ```bash tail -n $(expr $(date +%d) + $(date -d '3 months ago' +%d) * 24) /var/log/disk_usage.log | awk '{sum+=$1; count++} END {if (count > 0) print "Average disk utilization: " sum/count "%"; else print "No data available."}' ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值