チューニングメモ。
パラメータの細かい説明はいろんなサイトにまとめてあるので省略します。
環境としてはOSは問わずPHPでSQLゴリゴリでリクエストあたりレスポンス秒が少ないWebサービスで、
他にクローラツール等のDBサーバも請け負っています。
まず、見落としがちですが、
CLOSE_WAITのセッションを早く消します。
主にクローラツールが原因なのですが、TCPコネクションが無駄にkeepaliveされるので許されるギリギリの値まで削ります。
http://network.station.ez-net.jp/server/linux/network/time_wait.asp
が参考になります。
# vi /etc/sysctl.conf
に下記を追加。
net.ipv4.tcp_keepalive_time = 5
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_intvl = 2
net.ipv4.tcp_fin_timeout = 15
次にApacheチューニングですが、奥が深すぎるのでおおよその計算を設定して運用後、徐々に調整していきます。
私の環境では以下の様に。結構稼働範囲ギリギリです。
# vi /etc/httpd/conf/httpd.conf
Timeout 15
KeepAlive Off
HostnameLookups Off
TraceEnable Off
<IfModule prefork.c>
ServerLimit 300
StartServers 10
MinSpareServers 50
MaxSpareServers 100
MaxClients 300
MaxRequestsPerChild 4000
MaxMemFree 4096
</IfModule>
そしてMySQLの設定。
どのようなリレーションでサブクエリを多用するのかしないのか。同時にいくつアクセスがあるのかなど考えて調整していきます。
私の環境では細かい接続がバンバンくるので下記の様な設定です。
# vi /etc/my.cnf
max_connections = 1500
#tuning
query_cache_limit = 32M
query_cache_size = 256M
key_buffer = 2048M
max_allowed_packet = 4M
thread_stack = 192K
sort_buffer_size = 4M
read_buffer_size = 4M
read_rnd_buffer_size = 16M
join_buffer_size = 262144
wait_timeout = 120
interactive_timeout = 120
thread_concurrency = 300
thread_cache_size = 3000
table_cache = 10000
0 件のコメント:
コメントを投稿