一个用来监视和收集服务器某种异常状态的脚本
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
http://blog.devep.net/virushuo/2008/09/30/a_bash_script_for_monit_vmstat.html
有一台服务器,间歇性出现io急剧升高的状态,一直没找到原因。所以做了这个脚本。一下就找到了。放在这里共享给大家,谁有用自己改改用吧。
monitor.sh
#首先从vmstat中取得需要的数据。vmstat命令的结果如下:我们需要最后一行的数字。本例中是第一个r。(r: The number of processes waiting for run time.)
#procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
# r b swpd free buff cache si so bi bo in cs us sy id wa st
# 0 1 0 6350084 206432 5896400 0 0 0 77 6 8 1 1 91 7 0
#
vmb=$(vmstat | tail -1 | cut -c5-10|cut -d" " -f1)
# r 大于5的时候开始做log
if [ ${vmb} -gt 5 ]
then
date >> /root/all.log
vmstat >> /root/all.log
netstat -anp >> /root/all.log
ps -aux >> /root/all.log
#分别输出 时间,vmstat的全部数据,netstat的连接状态,所有任务状态等。你可以自己加需要的。
logdate=$(date +%Y%m%d)
echo '---------' >> /root/all.log
tail -100 /var/logs/http-access_log.${logdate} >> /root/all.log
#这部分是为了取得异常时候的访问log。因为我的日志是带有日期的,所以先用date命令来生成当前的时间
fi
然后放在crontab里面,每秒运行一次就可以了。很简单的脚本,不过很实用。一下就找到了问题是sendmail发送大量邮件造成的。
钱宏武老师对此亦有贡献。





Comments
RSS乱码了(偶用的是Bloglines)
Posted by: 沈蚊 | September 30, 2008 9:20 PM
bloglines时而有问题,不知道为什么。
Posted by: virushuo | October 1, 2008 8:02 PM
请教下,crontab怎么设置每秒钟运行一次啊
Posted by: dgj | October 7, 2008 4:40 PM
施主,你的头像真恶心
Posted by: kk | October 7, 2008 6:18 PM
我写错了,是每分钟一次。也用不着每秒。
需要每秒的话可以自己写个daemon。
Posted by: virushuo | October 7, 2008 8:23 PM
什么,看不懂。
Posted by: 無名部落格 | October 16, 2008 1:53 PM
很不错的东西,我那天肯定用的上
Posted by: 俞跗厚 | November 8, 2008 10:45 PM
我有一个问题,我这边的一个局域网Web应用,后台是两台IBM小型机跑AIX + HACMP + Oracle 9i + RAC,有时会出现连接数异常增多的情况(单机大于500,正常情况下在100以内),导致小型机或者数据库无法响应,不知道类似楼主提到这个脚本能否诊断出问题所在?
怀疑有两种可能,一是程序写的烂,有死循环的情况;二是AIX和Oracle的小版本没有升级到最新。
Posted by: zhaorui | August 19, 2009 1:16 AM