2005年12月10日土曜日

多分解決

なんでだろ〜なんでだろ〜
と、以前から頭を悩ませていたmysqldのゾンビプロセス大量発生問題。ファンが壊れてしばらく停止していたけれどファンを交換して復活したのでしばらくは安定して動作していたんですが、やはりゾンビプロセスは大量発生していた模様Orz 今日友人が「サイト繋がらないぞ」とツッコミを入れてくれました。
で、確認するとなんともはやかなりの期間放置してましたのでゾンビプロセスが502個Orz そりゃ処理出来んわな〜と思って早速
# /etc/init.d/mysql restart
で再起動しようとしたんですが、なんとエラーΣ
なんでも、メモリ不足でプロセス止められないよ〜とかなんとか。とはいえ放っとく訳にはいきませんので、致し方なく
# killall -KILL mysqld
で強制終了。で、なんとか全プロセスを殺しきった所でmysqlを再び起動したのですが、このままでは定期的にmysqlを再起動せねばならず、それは馬鹿馬鹿しいですよね。で、原因を再び調査し始めた訳です。
で、とりあえず広く浅く調べてみようということで
mysql defunct
のキーワードでぐぐる。と、トップに同じような症状に悩む本家の掲示板への書き込み発見(英語)。調べてみると、いきなり真相発覚!
MySQLはマルチスレッド処理を行うプログラムなのですが、その際キャッシュに残しておくスレッドの最大値を0に設定してあると私のような症状に陥ることがあるそうです。
で、自分のmysqlがどうなってるかを調べてみると、えぇばっちり0でしたともOrz
早速この値を適当に設定(とりあえずスレッド数5つで様子を見ることに)してmysqlを再起動。今のところ問題なくゾンビプロセスも発生していません。
ついでに調べていて分かったんですが、mysqldのプロセスが大量発生しているように見えたのは実際にはスレッドで、プロセス自体は1つらしいです。Kernel-2.4ではマルチスレッドのプログラムはプロセスがあるかのように表示されるので私が勘違いしていた模様。とはいえスレッドが500個も死んでたんだからそれはそれで大問題ですが^^;で、FC4はKernel-2.6なのでプロセスが1つしか見えなかったというのが真相のようです(Kernel-2.6ならマルチスレッドはプロセスが1つしか見えないのかどうかは未確認^^;)。
とりあえずはこれでゾンビスレッドが出来ずに動作しているようなのでしばらく様子を見てみることと染ます。あぁ、解決(?)してヨカッタヨカッタ^^

1 件のコメント:

  1. SECRET: 0
    PASS:
    そうなのよ〜、ようやく解決してほっとしてます。 英語で解決〜とは言うものの、掲示板で書かれている英語って難しい文法や単語があるわけでもないから英語の教科書とか論文読むよりよっぽど簡単よ〜。
    後は見覚えのあるコマンドラインやその結果から文章の内容を判断したり(コラw
    なので私の英語力はこれっぽっちも上達していないのでした〜^^;
    で、プロセスとスレッドの違いだけど、メモリ空間を共有しているかいないか程度じゃないかなぁ。私自身あまり理解できてないんだけれど^^;まだマルチスレッドなプログラムなんて組んだことないしねぇ。お互いマイペースで頑張っていきまっしょい!

    返信削除