Linux 内存 CPU 磁盘 网络流量的监控
内存:
free 命令
free命令由procps.*.rpm提供(在Redhat系列的OS上), free命令的所有输出值都是从/proc/meminfo中读出的。
1 2 3 4 5 6 total used free shared buffers cached 1 Mem: 24677460 23276064 1401396 0 870540 12084008 2 -/+ buffers/cache: 10321516 14355944 3 Swap: 25151484 224188 24927296
第一行 是从操作系统角度讲的, total代表总内存, used代表被使用的内存, shared代表被进程共享的内存,关于buffers和cached有更精彩的解释:
- A buffer is something that has yet to be "written" to disk.
- A cache is something that has been "read" from the disk and stored for later use.
total = used + free 即: 24677460 = 23276064 + 1401396
第二行是从程序角度讲的,
程序used = 系统used - 系统buffers - 系统cached,
即 10321516=23276064-870540-12084008
程序可用free = 系统free + 系统buffers + 系统cached,
即 14355944=1401396+870540+12084008
例:监控交换分区,如果swap超过3000M发出报警邮件。
#!/bin/bash useSwap=`free -m |tail -1 |awk '{print $3}'` if [ $useSwap -ge 3000 ]; then echo " Use swap more than 3000M, Please add memory in time" |mail -s "(Memory Warning)" ***@qq.com fi
注:要根据具体运行的程序来确定报警触发规则
CPU
uptime 或 vi /proc/cpuinfo
13:40:08 up 4:48, 1 user, load average: 0.46, 0.28, 0.15
0.46, 0.28, 0.15 分别代表1分钟,5分钟,15分钟CPU负载, 其数值n=cpu核心数表示负载刚好达到100%, 数值越大表示CPU负载越大
例: 监控CPU负载
#!/bin/bash cpus=`cat /proc/cpuinfo |grep "physical id" |wc -l` threshold=$[ $cpus - 1 ] load=`uptime |cut -d, -f 4 | cut -d: -f 2` control=`echo "$load > $threshold"|bc` #shell中小数和整数不能直接比较,要用bc计算器 if [ $control -eq 1 ];then echo " 10.1.1.183(nginx server) CPU load is too large" |mail -s "10.1.1.183(nginx server)" lianshubash.com fi
磁盘
df
常用 df -hl
例:监控磁盘使用情况
#!/bin/bash sda2DiskFree=`df -hl |grep "^/dev/sda2"|awk '{print $4}'|cut -dG -f 1` sda3DiskFree=`df -hl |grep "^/dev/sda3"|awk '{print $4}'|cut -dG -f 1` sda5DiskFree=`df -hl |grep "^/dev/sda5"|awk '{print $4}'|cut -dG -f 1` if [ $sda2DiskFree -le 100 ]; then echo " /dev/sda2 Disk space less than 100G,Please check the disk occupancy" |mail -s "(Disk Warning)" com fi if [ $sda3DiskFree -le 100 ]; then echo " /dev/sda3 Disk space less than 100G,Please check the disk occupancy" |mail -s "(Disk Warning)" com fi if [ $sda5DiskFree -le 70 ] ;then echo " /dev/sda5 Disk space less than 70G,Please check the disk occupancy" |mail -s "(Disk Warning)" com fi
du
查看文件夹的磁盘占用大小 常用 du -sh /
fdisk
查看磁盘分区 常用fdisk -l
网络流量
cat /proc/net/dev
查看网络流量情况
例 编写一个报警邮件,当主机的出口流量超过500M的时候,发送报警邮件
#!/bin/bash # outcount=`cat /proc/net/dev | grep eth1 | gawk '{print $10}'` outcheck=`echo "${outcount} > 500*1024*1024" |bc` if [ $outcheck -eq 1 ];then echo "Output on eth1 is greator than 500M." | mail -s "Network Waring" *@qq.com fi注:查看网络的其它命令 http://os.51cto.com/art/201404/435279.htm