FreeBSD のチューニング

FreeBSD をデフォルトの状態で運営していると様々な問題が発生します。
例えば一日 100,000/PV なんて超大忙しなサーバではデフォルトの状態では非常に重たいか、いつかフリーズしてしまいます。
そこで管理者が適切な値を FreeBSD に設定してあげる事でパフォーマンスアップを図ればある程度改善されるかもしれません。

sysctl について

FreeBSD の主なチューニング方法は sysctl というコマンドで操作します。
例えば下記のコマンドを入力してみてください。

% sysctl -a

だだだだーと大量の文字が流れたかと思います。
その一つ一つの値は、 Windows で例えるとするとレジストリみたいなもの、と言えばイメージが掴めると思います。
基本はこの sysctl でチューニングする事になります。

ネットワーク関連のチューニング

主に Web サーバやゲートウェイサーバを動かしている場合では基本となるチューニングがあります。
サーバに搭載しているメモリの量で左右される点もありますが、今時のサーバをお使いの方は大丈夫でしょう。

listen キューを増やす

Web サーバを運用していて、利用者がとても多い場合、この設定はまっさきに変えた方が良いでしょう。
これは待ち受け TCP コネクションの数で、この値を超えて接続できなくなってしまいます。

まずは現在の値を調べてみます。

% sysctl kern.ipc.somaxconn

kern.ipc.somaxconn: 128

デフォルトの値が 128 だと分かりました。
これはつまり TCP 待ち受けコネクションである listen キューが 128 まで確保されているということになります。
これを 4096 まであげてみましょう。

% sudo vi /etc/sysctl.conf

kern.ipc.somaxconn=4096

次に再起動して先ほどのコマンドを入力して 4096 と表示されていれば成功です。

% sysctl kern.ipc.somaxconn

kern.ipc.somaxconn: 4096

ディスクチューニングについて

サーバを長く運営されている方は最終的なチューニングとして、ディスクチューニングに当たる方も多いと思います。
結局のところ、サーバを運営していると I/O が一番のボトルネックになってくるので、そこまで来てしまった場合はサーバを増強したり、フロントにロードバランサを導入するなど、物理的な ( 金銭的な ) 問題になるかと思います。
しかし、最近は廉価サーバでも数年前のハイスペックパソコンと同等といっても良いほどスペックの底上げがされているので、大抵はそういったパソコンを何台か購入して、冗長化するなどで十分対応出来ます。 ( 世界の Google もこういった廉価サーバを大量に配置して、超大規模クラスタリングで運営していたそうです。今でもそうかもしれません )

また、ディスクチューニングは非常にデリケートな部分ですので、ここではごく一般的なチューニングしか載せませんが、興味がある方は調べてみても良いかもしれません。