こんにちは、( ,_ノ` )です。
さて、SSDサーバー7号機が2ちゃんねる実況系板のサーバーとしてデビューしました。
いままで、
で動いていた実況系板をSSDサーバー1台に詰め込んで様子を見ようという作戦。
昨夜のうちにlive23/live24.2ch.netの板が全てlive28.2ch.netに移転しています。
live28.2ch.net上にある板一覧へのリンクとサーバーの様子はこちらをご覧ください。
新作戦「一羽の鴎」/live28.2ch.net
今回 live28.2ch.net としてデビューしたSSDサーバーのスペックと設定をご紹介します。
スペシャルセッティング
・2ちゃんねるセッティング
・changiセッティング
・むむむさんスペシャルセッティング1 ネットワークバッファ拡大(2010/06/12 改良)
・むむむさんスペシャルセッティング2 httpd待機数の増量(2010/06/15 改良)
・むむむさんスペシャルセッティング3 無駄なディスクI/Oの削減(2010/06/11 設定)
・むむむさんスペシャルセッティング4 1Gbps接続用TCPチューニング(2010/06/12 設定)
・むむむさんスペシャルセッティング5 ネットワークバッファ使用量節約(2010/06/14 設定)
・むむむさんスペシャルセッティング6 保留状態のコネクションのキューの最大長を拡大(2010/06/16 設定)
・1Gbps 完全帯域保証
・ハードディスク(仮)
サーバースペック
・CPU:Intel(R) Core(TM)2 Quad CPU Q9550
・MEM:8 GB
・HDD:Seagate ST3250310AS 250GB SATA-2
・SSD:X25-M Solid-State Drive 80GB SATA-2 2.5(G2)
Model<INTEL SSDSA2M080G2GC 2CV102HD>
・NIC:2x Intel PRO 1000 NetWork Connection
・サーバー名: tiger3551.maido3.com
・IPアドレス: 206.223.151.120
・OS: FreeBSD 7.0R (amd64)
・Apache/2.2.10
その他の設定
・ICMP redirectログを記録しないよう変更(/etc/rc.conf icmp_log_redirect をコメントアウト)
・SunOSさん版logbufferのインストール(2ch特化型サーバースレッド Part46 / 178)
・/home と /hd にマウントオプション「noatime」を設定
・ExtendedStatus On
・BufferedLogs On
・ユーザレベルで全プロセスをtopコマンドで表示可能
・ユーザレベルで smartmontools でデバイス情報を取得可能
|
● 2ちゃんねるセッティング
2ちゃんねるセッティングではメモリディスクの作成、Apacheチューニング、
カーネルモジュール追加を行っています。
★ メモリディスク
頻繁に更新されるファイルや呼び出し回数が多いファイルをメモリディスク上に
置く事によりハードディスクへのアクセス回数を減らして負荷を解消します。
容量はサーバーに搭載されているメモリのサイズに合わせて任意に設定可能です。
BIG-server.com のサーバーは大容量メモリを標準搭載していますので、
メモリの追加無しでメモリディスクを作成できます。
★ Apacheチューニング
アクセス数が多いサーバーでもリソースを効率よく使えるように、
Apacheの各種パラメーターを調整します。
★ カーネルモジュール追加
accf_http.ko HTTP通信のパフォーマンスを向上させるモジュールを追加します。
accf_data.ko HTTPS通信のパフォーマンスを向上させるモジュールを追加します。
● changiセッティング
changiセッティングは2ちゃんねるセッティングの発展形です。
(設定方法についてはこちらの日記でもご紹介しています。)
★ ウェブサーバーメイン機能の高速化
changiセッティングでは、OSの実行ファイル/ライブラリ/モジュール、
Apacheの実行ファイル/ライブラリ/モジュールを、データ処理が速い
メモリディスク上にすべて展開しています。
★ 各種プログラム実行時のオーバーヘッドを軽減
changiセッティングでは、Apacheの実行ユーザーをシステムユーザーから
一般ユーザーに変更する事により、以下の効果が期待できます。
1. CGIプログラム実行時のSuExecによるオーバーヘッドを無くすことができ、
サーバーパフォーマンスの向上につながります。
2. mod_cgidsoやPHPなどのApacheモジュールから直接実行されるプログラムと
通常のCGIプログラムが同一ユーザとなるため、生成されるファイルのオーナーや
パーミッション等も同一となり、より円滑な運用が可能になります。
3. 高速なCGI実行を実現するためのSpeedyCGIを、従来のspeedyプログラムを
経由する方法(CGI方式)から、子プロセスの生成を伴わないmod_speedycgiモジュール
経由での実行に変更できます。
特に3.は、外部イベント等により集中的・爆発的にCGIが実行されるサーバーにおいて、
パフォーマンス上の大きな効果が期待できます。
このようにchangiセッティングでは、データ処理が速いメモリディスク上で
ウェブサーバーメインの機能を動かし、かつ各種プログラム実行時の
オーバーヘッドを軽減させる事によりサーバー負荷を極限まで減少させて、
より大量のアクセスがあっても快適にサーバーを動かします。
● むむむさんスペシャルセッティング1
突発的なアクセス数の増加でデータのやりとりが頻繁になった時に
処理が詰まらないように、ネットワークのデータバッファの値をチューニングします。
SSDサーバー7号機では以下の通りチューニングしています。
/boot/loader.conf
# increase nmbclusters, maxsockets, etc.
kern.ipc.nmbclusters=65536->131072 (2010/06/12 拡大) # 8GB メモリ
kern.ipc.maxsockets=65536 # 8GB メモリ
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
# nmb (number of mbufs) tuning for FreeBSD 7.x
# note: kern.ipc.nmbclusters=65536->131072 should be set at /boot/loader.conf
kern.ipc.nmbjumbop=32768->65536 (2010/06/12 拡大)
kern.ipc.nmbjumbo9=16384->32768 (2010/06/12 拡大)
kern.ipc.nmbjumbo16=8192->16384 (2010/06/12 拡大)
#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
(2010/06/12 追加 スペシャルセッティング4:1Gbps接続用TCPチューニング)
# 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
|
● むむむさんスペシャルセッティング2
httpdを初めから最大数で待機させておき、突発的なアクセスの増加があっても
受け入れ可能になるまでの待ち時間を作らないようにする設定です。
SSDサーバー7号機では以下の通りチューニングしています。
Apacheディレクトリ/conf/httpd.conf
【増量 6/15 13:55】
最初にhttpdを1024個起動し、アイドル状態のhttpdが常に704(703+1)個以上になるように起動数を変化させ、非常時には待機数を2048個まで増やす設定
StartServers 1024
MinSpareServers 703
MaxSpareServers 1024
ServerLimit 2048
MaxClients 2048
MaxRequestsPerChild 10000
MaxMemFree 2000
|
【増量 6/14 23:25】
StartServers 2048
MinSpareServers 2047
MaxSpareServers 2048
ServerLimit 2048
MaxClients 2048
MaxRequestsPerChild 10000
MaxMemFree 2048
|
【増量 6/14 23:05】
StartServers 1760
MinSpareServers 1759
MaxSpareServers 1760
ServerLimit 1760
MaxClients 1760
MaxRequestsPerChild 10000
MaxMemFree 2000
|
【増量 6/14 21:40】
StartServers 1408
MinSpareServers 1407
MaxSpareServers 1408
ServerLimit 1408
MaxClients 1408
MaxRequestsPerChild 10000
MaxMemFree 2000
|
【増量 6/14 11:00】
本日(6/14) 11:00以降にlive28の設定は下記の様に修正していますよ〜('A`)/
StartServers 1280
MinSpareServers 1279
MaxSpareServers 1280
ServerLimit 1280
MaxClients 1280
MaxRequestsPerChild 10000
MaxMemFree 2000
|
【増量 6/7 12:25】
本日(6/7) 10:00以降にlive28の設定は下記の様に修正していますよ〜('A`)/
StartServers 704
MinSpareServers 703
MaxSpareServers 704
ServerLimit 704
MaxClients 704
MaxRequestsPerChild 10000
MaxMemFree 2000
|
StartServers 704
MinSpareServers 32
MaxSpareServers 704
ServerLimit 704
MaxClients 704
MaxRequestsPerChild 10000
MaxMemFree 2000
|
● むむむさんスペシャルセッティング3
BIG-server.com ではサーバー内にDNSキャッシュを内包しています。
サイトのアクセス数が多くなってくると、DNSキャッシュへの問い合わせ回数も
それだけ多くなりますので、DNSキャッシュの問い合わせログの記録でかかる
I/O負荷も無視できなくなってきます。
スペシャルセッティング3ではDNSキャッシュの問い合わせログを止めて、
DNSキャッシュのログによるI/O負荷を解消します。
live28.2ch.net が入っているSSDサーバー7号機では、
DNSキャッシュの問い合わせログの記録でI/O負荷の約20%を占めていましたが、
スペシャルセッティング3の適用によりサーバーのパフォーマンスに余裕が生まれました。
● むむむさんスペシャルセッティング4
SSDサーバー7号機(live28.2ch.net)では、1Gbps専用線に接続しています。
FreeBSD 7.0におけるTCPのデフォルト設定は100Mbps接続を想定しているため、
1Gbps接続用にTCPのチューニングを施しました。
/etc/sysctl.conf
FreeBSD 7.0 デフォルト
net.inet.tcp.sendbuf_max: 262144
net.inet.tcp.recvbuf_max: 262144
net.inet.tcp.sendbuf_inc: 8192
net.inet.tcp.recvbuf_inc: 16384
net.inet.tcp.inflight.enable: 1
↓
1Gbps接続用TCPチューニング
net.inet.tcp.sendbuf_max=20480000
net.inet.tcp.recvbuf_max=20480000
net.inet.tcp.sendbuf_inc=16384
net.inet.tcp.recvbuf_inc=524288
net.inet.tcp.inflight.enable=0
|
● むむむさんスペシャルセッティング5
大量のアクセスが一気にサーバーに押し寄せてネットワークバッファが足りなくなると、
httpdプロセスが「zoneli(mit)」状態となり、サービスが停止する事があります。
この設定では、ネットワークバッファ使用量を節約する事により、バッファ不足の
発生を抑えてhttpdが「zoneli(mit)」状態になりにくいようにしています。
/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
|
● むむむさんスペシャルセッティング6
Apacheの方で制限している保留状態のコネクションのキューの最大長を
サーバー規模に合わせて拡大しています。
この設定により突発的に発生するアクセスの集中時(混雑時)の接続で
「詰まり」や「エラー」が発生しにくくなる事が期待されています。
Apacheディレクトリ/conf/httpd.conf
#
# Increasing maximum length of the queue of pending connections.
# (Default value is 511)
#
ListenBackLog 4096
|
FreeBSD 7.0RではListenBackLogは実際には設定値の1.5倍が設定されます。
デフォルト値511の場合、保留状態のコネクションのキューの最大長は768となり、
この数値を超えたTCP接続は破棄されます。
ListenBackLogに設定出来る最大値はkern.ipc.somaxconnの値に依存しており、
0より小さい値やkern.ipc.somaxconnより大きい値が設定された場合は、
kern.ipc.somaxconnの値が強制的に適用されます。
live28では安全性を考慮して、httpdの最大数の倍の値で設定しています。
2ちゃんねるのサーバーは普段は平和ですが、いわゆる「祭り」がありますと
どどっと人が押し寄せてきますので、標準セッティングのサーバーでは突発的な
来客に耐えられず「だんまり」してしまう事があります。
2ちゃんねるで定評のあるSSDサーバーとスペシャルセッティングの組み合わせで、
どこまで大きなアクセス数に耐える事が出来るか非常に楽しみです。
(繰り返しになりますが)
live28.2ch.net上にある板一覧へのリンクとサーバーの様子はこちらをご覧ください。
新作戦「一羽の鴎」/live28.2ch.net
※ なお、今回ご紹介したこれらのセッティングは、
T-Bananaサーバー(HDD版)でも大きな効果を発揮します。
2ちゃんねると同じセッティングのサーバーを使ってみたい方は
メールにていつでもお気軽にお問い合せ下さい。
レンタルサーバー BIG-server.com コース一覧
【18:47 追記】
changiセッティングの効果について、2ch特化型スレッドの910番で
むむむさんにご説明いただいた内容を元に加筆いたしました。
ありがとうございました。
【21:18 追記】
ITmedia 様に、SSDサーバー7号機2ちゃんねる実況サーバー live28.2ch.net
デビューの記事をご掲載頂きました。
絶対に負けられない戦いが、2ch実況鯖にある W杯前にリプレース作戦
情報をタレコミしていただきました2ch特化型スレッドの944様ありがとうございました。
|