2005年7月16日土曜日

解決策はないのかしら…

私は家でWebサーバを公開しております(内輪向けだけど)。Apache2にPHPを仕込み、XOOPSでもってMySQLと連動してコミュニティサイトを構築してまして、今までは割と頑張って動いてくれていたんです。
ところが数日前、不意に
「なんかサイトがおかしくなってるよ〜」
との指摘を受け、自分の公開しているXOOPSのページを開いてみると、なるほど確かにエラーが。エラーを見ると、どうもMySQLのデータベースにアクセスできない云々と書いてあるようです。
そこでsshでサーバにログインし、
ps -e | grep mysqld
でもってMySQLのプロセスを確認してみると、MySQLデーモン自体は起動していたのですが
XXXXX ? 00:00:00 mysqld (XXXXXにはプロセス番号が入る)
というゾンビプロセスが20個以上発生してました^^;
吃驚してとりあえず
/etc/init.d/mysql stop
でデーモンを止めてみましたがゾンビプロセスといくつかのmysqldプロセスが残ってしまったので、
kill -9 XXXXX (XXXXXは(以下略))
で強制終了したところ、2つか3つめくらいでゾンビプロセスごと全部消えてくれました。
その後
/etc/init.d/mysql start
として再び起動させたらXOOPSも正常動作するようになってくれたのですが、どうもしばらくするとゾンビプロセスが発生しています。
サーバはOSがDebianなのですが、ずっとwoodyで運用していました。が、正式にsargeがリリースされた事もあり、ひょっとしてMySQLのこの不具合(?)がどうにかできるかもと思いMySQLをアップグレードしてみたのです。
すると、MySQLのゾンビプロセスはやっぱり発生するわむしろMySQLが起動してるのにXOOPSはつながらなくなるわで大惨事Orz
結局、設定ファイルである/etc/mysql/my.cnfを更新前のものに戻したらXOOPSは正常動作するようになりました(ゾンビプロセスは相変わらず)。
更新前と更新後の設定ファイルの差分をしっかり確認はしていないのですが、プロセスを起動した際のソケット使用中のロックファイルを置く場所は変更されていました。
そこで更新前のファイルのソケットのロックファイルの保存場所を更新後のものと同じ場所に変更してやると、あれまXOOPSがデータベースにアクセスできなくなりますOrz
ちなみに、データベースそのものにはXOOPSがアクセスするユーザとパスワードでアクセス可能です。なぜソケットのロックファイルの保存場所が違うだけでXおおがアクセスできなくなるのかは謎ですが、mysqldのプロセス終了時のメッセージを見るとどうもMySQL更新後のロックファイルの保存場所でないとだめな感じがするのです。
今はXOOPSを動かすために更新前の保存場所にしていますが、ちょっと気持ち悪いので時間があるときに調べてみます。
また、もっと問題なゾンビプロセスですが、実際にはそのようなプロセスは存在していないようです。なのでメモリを食いつぶすということもおそらくなさそうです(多すぎると話は別?)。
今日もGoogle先生に尋ねてみたのですが、私と同様ゾンビプロセスが発生する事例は見付かれども解決策は見付からず。MySQLの設定ファイルを見たところ、ある程度(メモリ使用量16MB)を越えるまではスレッドを立てるようなので、そのあたりになにか原因がありそうですが…、はっきりしたことが分かっていません。
こちらの方はサイト運営の根幹にかかわることなので、できるだけ早く解決したいのですが、時間もなくてなかなか調べられないのが現状です…。
本腰入れるのは8月入ってからかなぁ。。。 でもその頃は今よりもっと研究に追われていそうだ^^;

2 件のコメント:

  1. SECRET: 0
    PASS:
    うーん、何でしょうねぇ。
    ゾンビが増えすぎると、プロセスの上限に引っかかって、プロセスが生成できなくなりますから、プロセス生成+破棄という処理があるものが動かなくなる可能性がありますね。
    こういうのって、直接的に「ここが悪い」とわかりませんから、難しいですね。

    返信削除
  2. SECRET: 0
    PASS:
    xiaoxiaさんこんばんは!
    あちゃー、セッションをクローズしてなかったのですね、それは痛い^^; でも私はそれ以前に自分で設計した訳でもないので偉そうな事言えた義理では無いのですが、今確認した所mysqldのゾンビプロセスは62個生成されてますね(爆) どれも実体は持っていないのですが、気分悪いですよねぇ…。
    あぁ、こりゃまた多分止まっちゃうだろうなー(苦笑)

    返信削除