2013年1月7日月曜日

Webサーバチューニング(MySQL+PHP)とりあえず版

チューニングメモ。

パラメータの細かい説明はいろんなサイトにまとめてあるので省略します。

環境としては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>

server-statusを見ながら細かい調整を重ねます。

 

そして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 件のコメント:

コメントを投稿