Linuxサーバー設定メモ(OSチューニング)

Linuxサーバー(主にCentOS)のOSチューニングについて、メモをまとめておく。
自分がセッティングするときに好んで仕込むおまじない。


■午前四時の高負荷の原因を止める。
mlocateとかmakewhatisとかは行われる処理はサーバーの仕事自体には関係ない。
なので実行させないようにする。
※やってることは実行属性を消してるだけなので、動かしたいときは755にでもしてあげればOK

 chmod 0 /etc/cron.daily/mlocate.cron
 chmod 0 /etc/cron.daily/makewhatis.cron
 chmod 0 /etc/cron.weekly/makewhatis.cron

Debianだとman-dbとかapt-xapian-indexとか。


スワップ抑制
メモリぎりぎりまでスワップを我慢させる設定。
低いほどスワップしにくくなる。
変更:60(デフォルト)-> 0

・すぐに反映
 echo 0 > /proc/sys/vm/swappiness

・再起動した時にも有効にする
 vi /etc/sysctl.conf
    # swap control
    vm.swappiness = 0


■【DB向け】IOキューサイズ変更
ディスクIOのキューサイズは低いほどレスポンス重視、高いほどスループット重視。
変更: 128(デフォルト) -> 1024
※設定対象はDBのデータがあるディスクデバイス

・すぐに反映
 echo 1024 > /sys/block/ディスクデバイス名/queue/nr_requests

・再起動したときにも有効にする
 vi /etc/rc.local
 上のコマンドを書いておく。


■【DB向け】IOスケジューラ
MySQL5.1のInnoDB pluginを使う場合、IOスレッドが多いので、デフォルトのcfqのままでよい。
MySQL5.1やMySQL5.0のビルトインInnoDBを使う場合は、noopかdeadlineにするとディスクIOの効率が向上する。
※設定対象はDBのデータがあるディスクデバイス
※2014/2/11追記:最近、DB向けにはcfqよりdeadlineやnoopのほうが高負荷に強いという話をみたので、ハードウェアによって最適な設定は違う模様。SSDとかの超高速なディスクが出てきたからかなぁ。

・すぐに反映
 echo deadline > /sys/block/ディスクデバイス名/queue/scheduler

・再起動したときにも有効にする
 vi /etc/rc.local
 上のコマンドを書いておく。


■【DB向け】ファイルへの最終アクセスタイムを記録しないようにする
ファイルシステムext3の場合の設定。
noatimeオプションを設定してあげるとファイルへの高頻度アクセスの負荷が減る。
※設定対象はDBのデータがあるパーティション

・すぐに反映
mount -o remount,noatime /dev/パーティション名  マウントポイント名

・再起動したときにも有効にする
 vi /etc/fstab
 /dev/パーティション名  マウントポイント名  ext3  defaults,noatime  2