OSの設定を最適化
突発的なアクセス数の増加でデータのやりとりが頻繁になった時に
処理が詰まらないように、ネットワークのデータバッファの値をチューニング。
/boot/loader.conf に以下を記述
# increase nmbclusters, maxsockets, etc.
kern.ipc.nmbclusters=131072
kern.ipc.maxsockets=65536
vm.pmap.shpgperproc=2048
kern.ipc.maxpipekva=41943040
/etc/sysctl.conf
# increase maximum file descriptors
kern.maxfiles=131072
kern.maxfilesperproc=65536
# increase listen queue
kern.ipc.somaxconn=32768
kern.ipc.maxsockbuf=20480000
# see http://qb5.2ch.net/test/read.cgi/operate/1097931665/666-676
net.inet.icmp.icmplim=3000
net.inet.icmp.icmplim_output=0
#authority
security.bsd.see_other_uids=1
#original settings of A-tiger
net.inet.tcp.rfc3042=1
net.inet.tcp.rfc3390=1
net.link.ether.inet.log_arp_wrong_iface=0
#changi Memory settings
vfs.ufs.dirhash_maxmem=134217728
1Gbps帯域接続サーバーの場合はさらにTCP設定をチューニング(スペシャルセッティング4)
※2ちゃんねるセッティングは標準100Mbps帯域設定
# additional network settings for 1Gbps connection
# http://fasterdata.es.net/TCP-tuning/FreeBSD.html
net.inet.tcp.sendbuf_max=20480000
net.inet.tcp.recvbuf_max=20480000
#net.inet.tcp.sendbuf_auto=1 # Send buffer autotuning enabled by default
net.inet.tcp.sendbuf_inc=16384
#net.inet.tcp.recvbuf_auto=1 # Receive buffer autotuning enabled by default
net.inet.tcp.recvbuf_inc=524288
net.inet.tcp.inflight.enable=0
引き続きOSの設定を最適化
/etc/sysctl.confに以下の設定を記述して、
ネットワークバッファ使用量を節約し、
大量のアクセスが一気にサーバーに押し寄せても、
バッファ不足発生を押さえサービスが停止しにくくなるようにする。
# The higher the buffer, the more mbufs will be used for network connections.
# Lowering these buffers down will reduce your memory usage and
# save yourself some mbufs.
# This should dramatically reduce your mbuf usage and get your server
# out of zonelimits once and for all.
# http://www.realfreebsdtips.com/networking/freebsd-stopping-zoneli-state/
net.inet.tcp.sendspace=8192
net.inet.tcp.recvspace=8192
apacheの設定を2ちゃんねる特化型へ
Aapcheのプロセスを初めから最大数で待機させておき、突発的なアクセスの増加があっても
受け入れ可能になるまでの待ち時間を作らないようにする調整。
また、Apacheで制限している保留状態のコネクションのキューの最大長をサーバー規模に合わせて拡大し、
アクセスの集中時(混雑時)の接続で「詰まり」や「エラー」が発生しにくくする。
httpd.confの設定で以下のように記述。
# Increasing maximum length of the queue of pending connections.
# (Default value is 511)
#
ListenBackLog 4096
・
・
・
ServerLimit 1280
StartServers 1024
MinSpareServers 351
MaxSpareServers 1024
MaxClients 1280
MaxRequestsPerChild 10000
MaxMemFree 2000
DNSキャッシュのログ出力を停止
BIG-server.com ではサーバー内にDNSキャッシュを内包し処理の効率化を図っている。
サイトのアクセス数が非常に多いサイトではDNSキャッシュへの問い合わせ回数も多くなるので
DNSキャッシュの問い合わせログを止めて、
DNSキャッシュのログによるI/O負荷を解消する。
ログの出力を止めるには /home/dnscache/run を次のように変更する。
#!/bin/sh
exec 2<&1exec >seedexec envdir ./env sh -c 'exec envuidgid dnscache softlimit -o250 -d "$DATALIMIT" /usr/local/bin/dnscache' >/dev/null 2>&1
rtprioによるlogbufferの優先度を変更
以下の設定でログバッファーの処理待ちを減少させ処理を効率化する。
httpd.confでログバッファーの優先度を31から23に変更
TransferLog "| exec /usr/sbin/rtprio 23 /usr/local/sbin/logbuffer
/etc/sysctl.confで非同期でディスクを読み書きするパラメーターの調整。
vfs.aio.max_aio_queue_per_proc=1024
vfs.aio.max_aio_queue=4096
|