[トラブルシューティング]大量のゾンビプロセス(zombie)が発生

4377 ワード

環境:SUSE Linux Enterprise Server 11 SP 2
1つのsuseシステムを検出したzombieは100以上のログインサーバ検出に達した
まず、クエリがどのプロセスによって引き起こされたかを調べます.
ps -ef|grep defu
sfhadm    7444  7443  0 02:10 ?        00:00:00 [test.sh] <defunct>
sfhadm    7463  7462  0 02:12 ?        00:00:00 [test.sh] <defunct>
sfhadm    7481  7480  0 02:14 ?        00:00:00 [test.sh] <defunct>

注意:これは私が後で障害を再現したデータです.
しかし、このスクリプトは問題なく、誰も変更したことがなく、以前は正常に動作していました.
このスクリプトの親プロセスがどのプログラムなのか見てみましょう
linux-dkcm:~ # ps -ef|grep 7443
root      7443  3282  0 01:12 ?        00:00:00 /usr/sbin/cron

これらのプロセスの親プロセスはcron、すなわちタイミングタスクプログラムcrontabであることがわかります.
このユーザーにアクセスしてみてください
$crontab -l
cannot chdir(/var/spool/cron), bailing out.
/var/spool/cron: Permission denied

ヒントが/var/spool/cronというディレクトリに入る権限がないことを発見しました
このプログラムの権限をもう一度見てみましょう.
ls -la /usr/bin/crontab
-rwxr-xr-x 1 root trusted 40432 Jan 24  2012 /usr/bin/crontab

もともとsビットが少なくなったsビットは一般ユーザーに一時的に権利を与える役割に相当するcrontabが少なくなったsビットが少なくなったら実行できない
sビットを加える
chmod 6755 /usr/bin/crontab

元のゾンビプロセスをすべて殺す注意:父プロセスを殺すには、サブプロセスは殺すことができません
ps -ef|grep defunct|grep -v grep|awk '{print $3}'|xargs kill -9

この問題の解決に成功したと思っていた.
しかし、観察してみると、ゾンビのプロセスはまだ発生しています.履歴を調べてみると、chmod 775/usr-Rを前日に実行した人がいて、/usrディレクトリの下にあるsビット付きのプログラムをすべて消去したことがわかります.
他のプログラムが影響を受けてcrontabの異常な動作を引き起こしたようです.
crontabが他のプロセスを呼び出すかどうかを確認します.
#pstree
init─┬─acpid
     ├─auditd─┬─audispd───{audispd}
     │        └─{auditd}
     ├─bonobo-activati───{bonobo-activati}
     ├─console-kit-dae───63*[{console-kit-dae}] ├─cron───17*[cron─┬─sendmail───postdrop] │ └─test.sh]

元crondはスクリプトを実行するときにsendmailを呼び出してスクリプト出力情報をcrondユーザーにメールで送信します.
sendmailのプロセス数を見てみるとやはりたくさんあります
ps -ef|grep sendmail|wc -l
309

しかし、他のシステムではsendmailはsビットを持っていないが、pstreeではpostdropを呼び出してメールを処理し、他のシステムではpostdropを見て、sビットを持っている.前にchmod 755/usr-Rを実行してこのプログラムのsビットも削除し、cron権限の問題を引き起こし、プロセスがゾンビプロセスになったからだ.このプログラムにsビットを追加します.
chmod 6755 /usr/bin/postdrop

観察してみると、ゾンビの進行は二度と現れなかった.
/etc/crontabのMAILTOを「」に設定すると、crontabはログを送信しなくなります.
ゾンビプロセスのトラブルシューティングによく使用されるコマンド:ps-ef|grep defu strace(スクリプトに遭遇してゾンビプロセスを生成し、このコマンドによって追跡して解決する、非常に有用なコマンド)lsof ldd pstree