crontab設定導致的伺服器程序異常問題 (r10筆記第4天)
前幾天的時候,有個同事問我一個問題,大體的意思是突然收到報警,伺服器的程序數翻了好幾倍,其實那個伺服器也沒有任何操作。所以想讓我幫忙看看。
他自己也做了一些簡單的分析,可以看出,裡面含有大量的CRONTD程序,sendmail程序等,大概佔用了近4000的程序。
$ ps -ef|grep sendmail |wc -l
1317
$ ps -ef|grep postdrop|wc -l
1317
$ ps -ef|grep CROND|wc -l
1315
登入到伺服器,我簡單看了下,發現確實已經是4000多程序了。如果這是一個繁忙異常的OLTP業務可能會放鬆我的警惕,但是這是一個業務很少的備庫,突然就提高了警覺。
top命令的結果如下:
top - 11:41:25 up 559 days, 16:52, 1 user, load average: 0.10, 0.10, 0.10
Tasks: 4288 total, 1 running, 4287 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32862536k total, 31871784k used, 990752k free, 629660k buffers
Swap: 16777200k total, 0k used, 16777200k free, 16914428k cached
# time ls |xargs -n 10 rm
real 0m22.791s
user 0m2.053s
sys 0m6.490s
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 262144 3381 258763 2% /var
而再次使用top檢視,4000多的程序瞬間降了下來,只有不到400程序。
top - 12:04:54 up 559 days, 17:16, 3 users, load average: 0.16, 0.23, 0.17
Tasks: 328 total, 1 running, 327 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32862536k total, 28072444k used, 4790092k free, 638572k buffers
Swap: 16777200k total, 0k used, 16777200k free, 16739416k cached
我查看了一下/var/spool/postfix/maildrop目錄下的檔案,發現了一個奇怪的情況。
-rwxr--r-- 1 root postdrop 641 Aug 27 23:10 CEADC52C
-rwxr--r-- 1 root postdrop 497 Aug 27 23:10 CEB7352D
-rwxr--r-- 1 root postdrop 516 Aug 27 23:10 E62A552E
-rwxr--r-- 1 root postdrop 632 Aug 27 23:20 CCF8F530
-rwxr--r-- 1 root postdrop 506 Aug 27 23:20 CCDD852F
-rwxr--r-- 1 root postdrop 516 Aug 27 23:20 E395C531
這個目錄下的檔案生成時間似乎有些問題,案例是每個小時生成一次,每次不應該是3個檔案。這個是什麼原因呢 ,經過一番排查,發現原來是另外一個配置在作怪。
配置資訊如下:
# vi /etc/cron.d/ntpdate
###################################################
*/10 * * * * root (/usr/sbin/ntpdate xxxx;/sbin/clock -w)
*/10 * * * * root (/usr/sbin/ntpdate xxxx;/sbin/clock -w)
*/10 * * * * root (/usr/bin/rdate -s xxxx;/sbin/clock -w)
如此來看問題就很容易理解了,這樣導致了沒10分鐘一次迴圈呼叫,所以修復了問題以後,檔案的生成頻率大大降低。