« 城之忧伤 | Main | 不小心赶了个苹果的时髦-新macbook »

一个用来监视和收集服务器某种异常状态的脚本

作者:virushuo 发表于 2008-09-30 13:09 最后更新于 2008-09-30 13:09
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明


有一台服务器,间歇性出现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)

bloglines时而有问题,不知道为什么。

请教下,crontab怎么设置每秒钟运行一次啊

施主,你的头像真恶心

我写错了,是每分钟一次。也用不着每秒。

需要每秒的话可以自己写个daemon。

什么,看不懂。

很不错的东西,我那天肯定用的上

我有一个问题,我这边的一个局域网Web应用,后台是两台IBM小型机跑AIX + HACMP + Oracle 9i + RAC,有时会出现连接数异常增多的情况(单机大于500,正常情况下在100以内),导致小型机或者数据库无法响应,不知道类似楼主提到这个脚本能否诊断出问题所在?

怀疑有两种可能,一是程序写的烂,有死循环的情况;二是AIX和Oracle的小版本没有升级到最新。

Post a comment


about me:
me.jpg
CC License. Some rights reserved.
署名·非商业用途·保持一致
本站之所有未作特别说明的内容均使用 创作共用协议.
POWERED_BY_MT_3.2