Apache チューニング tuning

https://www.digitalocean.com/community/questions/what-settings-digitalocean-suggested-for-tuning-of-freebsd-installation

FreeBSD Accept Filter

カーネルモジュール

  • accf_http.ko HTTP通信のパフォーマンスを向上させるモジュール
  • accf_data.ko HTTPS通信のパフォーマンスを向上させるモジュール
# kldload accf_data
# kldload accf_http

# vi /boot/loader.conf
 ====
accf_data_load="YES"
accf_http_load="YES"
 ====

Listen しているソケットに対して、OS が固有に持っているプロトコルについての最適化を 有効にするディレクティブです。大前提となる条件は、データが受信されるか HTTP リクエスト全体がバッファされるかするまで、カーネルがサーバプロセスに ソケットを送らないようになっている、ということです。現在サポートされているのは、 FreeBSD の Accept Filter と Linux のプリミティブな TCP_DEFER_ACCEPT のみです。

FreeBSD のデフォルト値は :

AcceptFilter http httpready
AcceptFilter https dataready

httpready Accept Filter は HTTP リクエスト全体を、 カーネルレベルでバッファリングします。リクエスト全体を受信し終わると、 その後サーバプロセスにそれを送ります。詳細については accf_http(9) を参照してください。HTTPS のリクエストは暗号化されているので accf_data(9) フィルタのみが使用されます。

http://httpd.apache.org/docs/2.3/ja/mod/core.html

pkg、portsのインストールの場合は
apache24_http_accept_enable
で accf_http が有効

カーネルのパラメータ Kernel

sysctl -w kern.ipc.somaxconn=4096
sysctl -w net.inet.icmp.icmplim=3000

# vi /etc/sysctl.conf
 ====
kern.ipc.somaxconn=4096
net.inet.icmp.icmplim=3000
 ====

icmplimを増やすのではなくnet.inet.tcp.blackhole=2にしたほうがよさそう?

デフォルト値
kernel parameter 12.3 11.0 10.1 9.0 8.2 7.3
kern.ipc.maxsockbuf 2097152 (2MB) 2097152 (2MB) 2097152 (2MB) 262144 262144
kern.ipc.nmbclusters 1018408 126184 25600 25600
kern.ipc.somaxconn 128 128 128 128 128
net.inet.icmp.icmplim 200 200 200 200 200 200
net.inet.tcp.recvbuf_max 2097152 (2MB) 2097152 (2MB) 2097152 (2MB) 262144 262144
net.inet.tcp.sendbuf_max 2097152 (2MB) 2097152 (2MB) 2097152 (2MB) 262144 262144
net.inet.tcp.fast_finwait2_recycle 0 0 0
net.inet.tcp.finwait2_timeout 60000 60000 60000
net.inet.tcp.msl 30000 30000 30000

kern.ipc.somaxconn は kern.ipc.soacceptqueue に名前が変わった。

2ch特化型サーバ・ロケーション構築作戦 Part32
644 : root▲▲ ★ : 2009/08/07(金) 11:53:24 ID:???0 BE:5746379-DIA(102777) [141/184回発言]
どくおさんへ:

kern.ipc.maxsockbuf はこのスレでも幾度となく出てきたパラメータです。
kern.ipc.maxsockbuf で Google するといっぱい出てきます。

FreeBSD のデフォルト値は忙しいサーバ向けではないので、
増やしたほうがいいかと。

今の root 権限ありサーバでは、/etc/sysctl.conf にこんな設定を入れています。
何度も痛い目にあって設定したこの値には実績があるです。
このスレの過去ログにも書いてあるはず。

ちなみに # でコメントしてある値は旧 tiger (2G mem)の値です。

---
# increase listen queue
#kern.ipc.somaxconn=8192
kern.ipc.somaxconn=32768
#kern.ipc.maxsockbuf=2097152
kern.ipc.maxsockbuf=20480000

http://logsoku.com/thread/qb5.2ch.net/operate/1249070920/644

TIME_WAIT net.inet.tcp.msl

1. sysctl で TIME_WAIT を短く(60秒 -> 20秒)
# sysctl -w net.inet.tcp.msl=10000
10秒でも問題ない気がする

http://ktjx.blogspot.com/2010/02/blog-post_13.html

Scratching My Needs: FreeBSD - How to reduce TIME_WAIT connections

2009-12-27