だるろぐ

だるいぶろぐです

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 が走らないんじゃないの」
だそうな。


力尽きました。