mysqlがCPU100%使っててload averageが常時1なのはFreeBSDではよくあること
とあるDBサーバで何となくtop打ったらload averageが常時1で、調べたらそんな状態が数ヶ月続いていたことに気付いた。
俺 「くぁwせdrftgyふじこlp」
上司「BSDではよくあること」
どうもBSDではよくあることらしい。んで調べてみると
http://dev.mysql.com/doc/refman/4.1/ja/freebsd.html
最も顕著なのは、MySQL がホスト名を IP アドレスに変換するために使用する gethostbyname() 関数です。
特定の状況下で、mysqld プロセスは、突然、CPU 負荷 100% 状態を引き起こして、応答不能になります。
この状態が発生したら、--skip-name-resolve オプションを使用して MySQL を起動してみてください。
gethostbynameが重いから、
- 言われてるようにオプション付加してmysqlを起動する
- my.cnf に skip-name-resolve と書く
- skip_networking をONにする(setなら再起動したら戻りそうな)
のどれかをやればいいらしい。検証してない。
が、問題のサーバでは応答もするしちゃんと動いているので何か違う気はする。
あと、ほぼ同じ環境の別マシンのmysqlはそんな事になってなかったのだけど、それも分からん。
「ローカルIPでしか接続されないなら gethostbyname が走らないんじゃないの」
だそうな。
力尽きました。