unix/linux bash shell定时检测进程内存和CPU利用率 并且保存下面

海外服务器 (377) 2015-10-27 14:24:33

unix/linux bash shell定时检测进程内存和CPU利用率,并且以"名称+当前时间"的形式保存下来:

#/bin/bash

LOAD=$(awk '{print $1}' /proc/loadavg)

CPUNUM=$(grep processor /proc/cpuinfo | wc -l)

mkdir /home/log

if [ $(echo "$LOAD > $CPUNUM" | bc) = 1 ]; then
    RESULT=$(ps -eo pcpu,pmem,user,args | awk '$1 > 0' | sort -nr)
    if [ -n "$RESULT" ]; then
        echo "$RESULT" > /home/log/snapshot.$(date +"%Y%m%d%H%M")
    fi
fi

/proc/loadavg里面记录的信息和uptime相似

#cat /proc/loadavg

0.00 0.00 0.00 1/178 18965

前三个为 当前一分钟负载,当前5分钟负载,当前15分钟负载。

 

如果我们的CPU是单核,那么这个负载值为1就是满载;如果我们的CPU为n,那么我们的系统负载为n就是满载,这个shell就是靠这个来判断当前一分钟CPU是否负载,我们使用crontab 设置每分钟都执行一次,注意这样久了你的硬盘可能会爆满,可以解决短时间内的检测。

THE END