一个服务器负载过高的问题

今天服务器出了许多问题,首先是几乎所有服务都停止了,http,ftp,mysql… 都访问不到,但是能ping到。客服帮忙重启了一下服务器后,ping不通。发现rc.local中设置网关的地方,被改成一个错误网关地址了,不知为何。修复后发现,在同时,系统的负载就不断升高,一直到了110以上,响应越来越慢。用top看了一下,发现有两个diff进程,比较的文件是邮件系统的log,占了极高的资源,4分钟了还没运行完。。。kill掉,顺便删掉过大的log文件(人工rotate,估计被邮件洪水了),暂停邮件系统,终于正常了,负载恢复到0.1+。
btw. 用 top -bcisSH 发现哪些家伙在啃CPU
但还没完呢…… 一旦重新开启postfix服务,就有上万个链接连到DNS服务器、x个邮件服务器,发送大堆的垃圾邮件,然后服务器又像死了一样。先检查一下哪个帐号被利用了,到/var/mail里面看到一个比较大的文件,属于一个临时创建的帐号的,很可能就是他了,删掉邮件、帐号先。然后看了一下postfix的邮件队列(/var/spool/postfix/active, /var/spool/postfix/defer),发现有将近2G的邮件要发送!。。。用“postqueue -d ALL”清空邮件列表,一阵时间之后,终于OK了,启动postfix也没有发生情况。 这是postfix邮件队列的长度走势图,可以看到,因为邮件数量巨大,系统不堪重负,出现了很多统计断节。后来关闭邮件系统之后,队列长度保持一条横线,没有发生变化。最后清空后,一直处于正常的范围了。 postfix邮件队列长度走势 这是对应的连接数走势图,高峰时期达到了同时1万个连接,真恐怖 连接数量走势 系统负载也趋于正常了。 系统负载走势图 问题终于告一段落了,服务器又恢复了以前的速度,真开心!同时也感受到,要学习的东西太多了。。