Custom Search

JITAKU_SVR_Wiki

kernelチューニング

このWIKIのような小さいサイトだと、ほぼデフォルトの設定でことは足りるが、
日に10万、100万と言うようなアクセス数のあるサイトだと、デフォルトの設定では運用が難しくなる場合がある。

単純にサーバ台数を増やすということも可能だが、コストもかかるし、当然障害が増える箇所も増えるなど良いことばかりではない。

そんなときにkernelのチューニング一つで、サーバを増やさなくても良いこともある。

それ以外にも、OSの挙動だったり、アプリの挙動だったりを制御することも出来るので、知っていて損はないはず。

ここではCentOSでのkernelのチューニングの方法をメモ。
と言ってもすべてを理解するのは難しいので、自分が直面したところをピックアップ。

また、以下のチューニングはsysctlコマンドでも可能なので、そちらも必要であれば参照されたし。



backlogチューニング

backlogとは、一度に受け入れられるTCPセッションの数。
OSは一度に受け入れられるTCPのセッション数が予め決められている。
(デフォルトは1024)
この値を超えたものに関してはOSはSYNパケットを拒否することになる。
溢れたパケット(overflow)についてはnetstatで確認できる。

・確認方法

# sysctl -a | grep net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_max_syn_backlog = 1024

ただし、この値はnet.core.somaxconnより大きかった場合、net.core.somaxconnの値を優先する。

net.core.somaxconn

一度に受け入れられるTCPセッションのキューの数
TCPのセッション数をbacklogで管理し、それを超えたものはキューに格納される。
このキューの数をここで設定する。
デフォルトは128になっている。

注意してほしいのは、この設定をデフォルトのままにしておくと、上記で書いたように、
net.ipv4.tcp_max_syn_backlog > net.core.somaxconn
ということになる。
つまり、いくらbacklogの受け口を広げても一度に受け入れられるTCPセッションは128までとなってしまう。

確認方法

# sysctl -a | grep net.core.somaxconn
net.core.somaxconn = 128

exec-shield

exec-shieldはデフォルト"1"で設定されている。
アプリの実行の制御、という感じかのかな?
どの値が正しい、と言うのは当然ないのだが、アプリの要件次第で変更することがあったのでメモ。

変更の値は以下が用意されている(CentOS6.5で検証)
0=完全無効
1=アプリの実行ごとに"有効"
2=アプリの実行ごとに"無効"
3=完全有効

設定変更

★一時的に変更(次回起動時はデフォルトに戻る)

# echo “3” > /proc/sys/kernel/exec-shield

★永続変更(次回起動時にも設定を維持する)

# vim /etc/sysctl.conf
(最終行辺りに追記)
kernel.exec-shield = 3

★設定を反映
① OSを再起動する
② # sysctl –p(コマンド実行)

上記の①、②どちらもでも可能。

★確認方法

# sysctl kernel.exec-shield
上記で現在の値が確認出来る。

参考

http://ebookfan.mobi/web/dev/linux/linux-kernel-tuning.html
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-proc-dir-sys.html


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-17 (木) 16:49:15 (707d)