这篇博客中所写的脚本,在实际工作中并没有什么卵用,工作中并不会用到这种脚本去监控。不过自己写一遍,可以让初学者对CPU、内存、磁盘等一些基础知识和基础命令更加了解。

1、利用vmstat工具监控CPU详细信息,然后基于/proc/stat计算CPU利用率进行监控,超过80报警并提取出占用cpu最高的前十进程。

vmstat是Linux系统监控工具,使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。

r:运行队列中的进程数;b:等待IO的进程数。

swpd:已用虚拟内存大小(k);free:空闲内存大小;buff:已用缓冲大小;cache:已用缓存大小。

si:每秒从交换区写入内存的大小(kb/s);so:每秒从内存写入交换分区的大小。

bi:每秒读取的块数;bo每秒写入的块数。

in:每秒中断数,包括时钟中断;cs:每秒上下文切换数。

us(user time):用户进程执行消耗cpu时间;sy(system time):系统进程执行消耗cpu时间;id:空闲时间(包括IO等待时间);wa:等待IO时间。

/proc/stat:

这个文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。可以利用其中信息计算cpu的利用率。

每行每个参数的意思为(以第一行为例,单位:jiffies,1jiffies=0.01秒):

user(62124):从系统启动开始累计到当前时刻,用户态的CPU时间,不包含 nice值为负进程。

nice(11):从系统启动开始累计到当前时刻。

system(47890):从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。

idle(8715270):从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间。

iowait(84729):从系统启动开始累计到当前时刻,硬盘IO等待时间。

irq(0):从系统启动开始累计到当前时刻,硬中断时间。

softirq(1483):从系统启动开始累计到当前时刻,软中断时间。

CPU时间=user+nice+system+idle+iowait+irq+softirq。

CPU利用率=(idle2-idle1)/(cpu2-cpu1)*100。

ps aux:

显示其他用户启动的进程(a)

查看系统中属于自己的进程(x)

启动这个进程的用户和启动时间 (u)

代码如下:

#!/bin/bash
#
CPU_us=$(vmstat | awk '{print $13}' | sed -n '$p')
CPU_sy=$(vmstat | awk '{print $14}' | sed -n '$p')
CPU_id=$(vmstat | awk '{print $15}' | sed -n '$p')
CPU_wa=$(vmstat | awk '{print $16}' | sed -n '$p')
CPU_st=$(vmstat | awk '{print $17}' | sed -n '$p') CPU1=`cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
sleep
CPU2=`cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
IDLE1=`echo $CPU1 | awk '{print $4}'`
IDLE2=`echo $CPU2 | awk '{print $4}'`
CPU1_TOTAL=`echo $CPU1 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
CPU2_TOTAL=`echo $CPU2 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
IDLE=`echo "$IDLE2-$IDLE1" | bc`
CPU_TOTAL=`echo "$CPU2_TOTAL-$CPU1_TOTAL" | bc`
#echo -e "IDLE2:$IDLE2\nIDLE1:$IDLE1\nCPU2:$CPU2_TOTAL\nCPU1:$CPU1_TOTAL"
#echo -e "IDLE:$IDLE\nCPU:$CPU_TOTAL"
RATE=`echo "scale=4;($CPU_TOTAL-$IDLE)/$CPU_TOTAL*100" | bc | awk '{printf "%.2f",$1}'` echo -e "us=$CPU_us\tsy=$CPU_sy\tid=$CPU_id\twa=$CPU_wa\tst=$CPU_st"
echo "CPU_RATE:${RATE}%"
CPU_RATE=`echo $RATE | cut -d. -f1`
#echo "CPU_RATE:$CPU_RATE"
if [ $CPU_RATE -ge ]
then echo "CPU Warn"
ps aux | grep -v USER | sort -rn -k3 | head
fi

2、利用free工具监控内存利用率,超过80报警并提取出占用内存最高的前十进程。

代码如下:

#!/bin/bash
#
total=$(free -m | sed -n '2p' | awk '{print $2}')
used=$(free -m | sed -n '2p' | awk '{print $3}')
free=$(free -m | sed -n '2p' | awk '{print $4}')
shared=$(free -m | sed -n '2p' | awk '{print $5}')
buff=$(free -m | sed -n '2p' | awk '{print $6}')
cached=$(free -m | sed -n '2p' | awk '{print $7}')
rate=`echo "scale=2;$used/$total" | bc | awk -F. '{print $2}'`
echo -e "total\tused\tfree\tshared\tbuffer\tavailable"
echo -e "${total}M\t${used}M\t${free}M\t${shared}M\t${buff}M\t${cached}M\nrate:${rate}%"
if [ $rate -ge ]
then echo "Memory Warn"
ps aux | grep -v USER | sort -rn -k4 | head
fi

3、利用df命令监控磁盘利用率,超过80报警。

df :显示磁盘分区上的可使用的磁盘空间。

  -h 以更易读的方式显示;

  -P 使用POSIX的输出格式。

#!/bin/bash
#
DEV=`df -hP | grep '^/dev/*' | cut -d' ' -f1 | sort`
for I in $DEV
do dev=`df -Ph | grep $I | awk '{print $1}'`
size=`df -Ph | grep $I | awk '{print $2}'`
used=`df -Ph | grep $I | awk '{print $3}'`
free=`df -Ph | grep $I | awk '{print $4}'`
rate=`df -Ph | grep $I | awk '{print $5}'`
mount=`df -Ph | grep $I | awk '{print $6}'`
echo -e "$I:\tsize:$size\tused:$used\tfree:$free\trate:$rate\tmount:$mount"
F=`echo $rate | awk -F% '{print $1}'`
if [ $F -ge ];then
echo "$mount Warn"
else echo "It's OK"
fi
done

CPU物理信息

查看物理cpu个数:

  cat /proc/cpuinfo | grep "physical id" | uniq | wc -l

查看cpu核数:

  cat /proc/cpuinfo | grep "cpu cores" | uniq

查看逻辑cpu个数:

  cat /proc/cpuinfo | grep "processor" | wc -l

最新文章

  1. Oracle 数据库基础学习 (七) SQL语句综合练习
  2. 示例开发过程记录:meteor,react,apollo
  3. 你听说过哪些坑人 or 赚钱的歪点子?真是骗局太多,傻子都不够用啊!
  4. JS实现雪花效果
  5. python实现软件的注册功能(机器码+注册码机制)
  6. DSP using MATLAB示例 Example3.5
  7. cl_gui_cfw=>flush
  8. MongoDB非正常关闭后修复记录
  9. delphi 单引号在字符串中使用方法
  10. 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
  11. The project target (Android 6.0) was not properly loaded或者The rendering target (Android 6.0) is still loading.
  12. [个人翻译]Redis 集群教程(下)
  13. zookeeper原理介绍
  14. 什么是KMP算法?KMP算法推导
  15. window mysql8.0 zip版本安装
  16. Java list.remove( )方法需要注意的地方
  17. Java Spring Boot VS .NetCore (七) 配置文件
  18. Spark中的Join类型
  19. Codeforces 1068 - A/B/C/D/E - (Done)
  20. Js/Bind()的认识

热门文章

  1. 替换iframe的内容
  2. 【学习总结】GirlsInAI ML-diary day-16-pip install XX
  3. 为github添加ssh key
  4. 【Python3练习题 013】 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字
  5. MySQL 的两个特殊属性 unsigned与 zerofill
  6. [转帖]csdn windows 下载整理.
  7. python之路--初识函数
  8. CSS3圆角详解(border-radius)
  9. 无法启动此程序,因为计算机丢失MSVCR110.dll
  10. 在delphi中生成GUID/自动获取临时表名......