Linuxサーバにおけるパフォーマンス高速化のための設定
CentOS5、Ubuntu、Debianで実行してみたもの。効果あった気がする。
■ディスクチューニング
参考URL
http://www.itmedia.co.jp/enterprise/articles/0707/19/news012.html
http://www.avant-tokyo.com/linux/hdparm.html
hda表示=IDE
sda表示=SCSIorSATA
sdaの場合には以下のいくつかのパラメータは無効
# hdparm -Tt /dev/hda 読み出しテスト
# hdparm -v /dev/hda パラメータ確認
# hdparm -c3 /dev/hda 32bitモード処理
# hdparm -u1 /dev/hda 割り込み処理対応
# hdparm -d1 /dev/hda DMA有効化
# hdparm -i /dev/hda HDが同時に読み込めるセクタ数
# hdparm -m16 /dev/hda 同時読み込みを16に設定
# hdparm -a1024 /dev/hda readaheadを1024に設定する
-a128、-a256、-a512、-a1024、-a2048 測定結果のよいものを使う
# hdparm -k1 /dev/hda 設定を書き込み
■ディスク書き込みの削減
Linuxではファイルを読んだ時にもatimeを更新するため更新しない設定をすることで、書き込み量を減らす。
この設定はディスクにSSDを採用している際に特に有効。
/etc/fstabのマウントオプションとして「noatime」を指定する
# vi /etc/fstab
LABEL=/ / ext3 defaults,noatime 1 1 ←noatimeを追記
再マウントする
# mount -o remount /
mountコマンドでnoatimeが有効になっていることを確認
# mount
/dev/hda1 on / type ext3 (rw,noatime)
■I/Oスケジューラの変更
CentOS等では標準でcfqが採用されているが、データベース運用等をしている場合にはdeadlineが望ましい。
# echo deadline > /sys/block/hda/queue/scheduler
/sys/block/以下は使用しているディスクに合わせて変更
#cat /sys/block/hda/queue/scheduler
noop anticipatory [deadline] cfq ←となっていればOK。
/etc/rc.d/rc.local に以下を追記して再起動時にも適用されるようにする
echo deadline > /sys/block/hda/queue/scheduler
■プロセススワップの抑制
スワップが発生するとレスポンスが落ちるので、ファイルシステムキャッシュのためにプロセスがスワップしないよう設定を追加する。
/etc/sysctl.confに以下を追記する
vm.swappiness = 0
■/proc/sys/以下のパラメータ変更
カーネルのパラメータを修正してパフォーマンスを上げる。()内は参考値
マシン環境で最適値は異なるので試行錯誤する必要あり。
同時に開けるファイル数を増やす
/proc/sys/fs/file-max(131072)
同時スレッド数を増やす
/proc/sys/kernel/threads-max(131072)
ネットワークの送受信可能速度を上げる
/proc/sys/net/core/wmem_default(65536)
/proc/sys/net/core/wmem_max(1048576)
/proc/sys/net/core/rmem_default(65536)
/proc/sys/net/core/rmem_max(1048576)
プロセッサが一度に処理するパケット量を増やす
/proc/sys/net/core/netdev_max_backlog(4096)
tcpのtime_waitを保持できる上限を上げる
/proc/sys/net/ipv4/tcp_max_tw_buckets(131072)
利用可能な内部通信socketを増やす
/proc/sys/net/ipv4/ip_local_port_range(16384 65535)
設定を起動時に自動設定するためには以下に記述する
/etc/sysctl.conf