使用shell脚本分析系统CPU、内存、网络吞吐情况

前言

        此文章内的代码仅在centos7.6上顺利执行过,其他系统版本是否能成功执行暂时未知

        可以实现的功能有:统计指定间隔时间内,系统CPU、内存、网络吞吐的平均使用量,若定时执行的话,还可以清理所设置时间之前的日志

思路

        获取cpu资源可以从“/proc/stat”中获取,获取网络吞吐情况可以从“/proc/net/dev”中获取,获取内存使用信息可以从“/proc/meminfo”中获取

具体脚本代码

#!/bin/bash

#获取执行间隔(单位:秒)
sleeps=$1
#获取记录存储天数(单位:天)
save_date=$2

#获取电脑负载情况
function getStatus(){
	# 判断记录条数是否超过规定记录存储时间

	# 应记录条数
	should_num=$((3600/$sleeps*24*$save_date))

	# 实际条数
	acture_num=$(awk 'END{print NR}' /temp/all.log)

	# 判断是否超过规定记录的条数,将所有超过的都删掉
	if [ $acture_num -gt $should_num ]; then
		sed -i "1,$((${acture_num}-${should_num}))d" /temp/all.log
	fi
	

	# 读取间隔时间 前 的cpu使用情况
	local cpu_front=(`cat /proc/stat | grep -E "cpu\b" | awk -v total=0 '{$1="";for(i=2;i<=NF;i++){total+=$i};used=$2+$3+$4+$7+$8 }END{print total,used}'`)
	# 读取间隔时间 前 的网络使用情况
	local traffic_start=(`awk '/eth0/{print $3,$11}' /proc/net/dev`)

	sleep $sleeps

	# 读取间隔时间 后 的cpu使用情况
	local cpu_later=(`cat /proc/stat | grep -E "cpu\b" | awk -v total=0 '{$1="";for(i=2;i<=NF;i++){total+=$i};used=$2+$3+$4+$7+$8 }END{print total,used}'`)
	# 读取间隔时间 后 的网络使用情况
	local traffic_end=(`awk '/eth0/{print $3,$11}' /proc/net/dev`)

	# 计算cpu使用率
	cpu_usage=$(((${cpu_later[1]}-${cpu_front[1]})*100/(${cpu_later[0]}-${cpu_front[0]})))

	# 计算入口流量
	netin=$(((${traffic_end[0]}-${traffic_start[0]})/$sleeps ))
	# 计算出口流量
	netout=$(((${traffic_end[1]}-${traffic_start[1]})/$sleeps ))

	# 获取内存使用率
	memused=$(awk '/MemTotal/{total=$2}/MemAvailable/{free=$2}END{printf "%3.2f",(total-free)/total}' /proc/meminfo)

	# 获取时间并记录日志
	time=$(date +%s)
	echo -e "\n"$time,$cpu_usage,$memused,$netin,$netout"\c" >> /temp/all.log

}

getStatus

执行方法

        切换到脚本所在目录后,执行脚本文件即可,但是注意后面要接两个参数

        第一个参数是统计时间间隔(单位为秒),后面代码会根据这个时间间隔,来算出间隔时间内cpu、内存、网络吞吐的平均使用量,若搭配crontab来定时使用,建议时间间隔为60,因为crontab的最小执行间隔为1分钟,注意:若定时执行,传入的统计时间间隔要与执行间隔保持一致,否则会统计不准确

        第二个参数是日志记录天数(单位为天),因为若此脚本被定时执行后,若不添加记录天数的话,文件会越来越大,长期以来需要人工清理,故设置此参数

./文件名.sh 60 1

定时执行方法

1.打开定时时程表

crontab -e

此时打开一个文本

2.添加任务

先按 i 进入编辑模式

输入以下文本

* * * * * bash /脚本的绝对路径 60 1

(上述的 “脚本的绝对路径” 需要按实际情况替换)

上述做法会让此脚本一分钟执行一次,具体其他更长执行间隔,请自行解决,更短执行间隔需要改动我的代码,也自行解决

保险起见,重启一下crontab(只需执行第三条即可)

service crond start //启动服务

service crond stop //关闭服务

service crond restart //重启服务

service crond reload //重新载入配置

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值