大規模なサービスを行うサーバOSとしておこなうべき
チューニングの定石について記述します
kernelのバージョンは2.4.31を対象にしています
(もう2.6でしょう)
(2.4版のメンテやめます)
OSのデフォルト設定は一般的な規模を想定しています
それを逸脱するような大規模な用途(大規模なwebサーバ、
web cache(squid
)サーバ、バーチャルドメインサーバ[仮想サーバ])に使用するには、
やはりそれなりのチューニングが必要になってきます
以下で、そのチューニングの定石を列挙します
(なぜチューニングが必要なのか)
(個々の値については各サイトで調節してください)
(以下のパラメータは Intel(IA32)+PC/ATアーキテクチャ + 100Mbps Ethernet の場合を想定しています)
下記のようなチューニングをあらかじめ施してある kernel を提供しているディストリビューションが
最近は増えて来ましたので、良く注意して作業する事
(サーバ用と称しているものはそのままでよいのでは? 最近は楽になってますね)
(そろそろこのWebも店仕舞いかしらと思う今日この頃、如何お過ごしでしょうか?)
[自身で vanilla source から kernel を再構築する場合、下記にあるような patch を吟味して、必要な物を適用してください]
を sysctl.conf に追加しますfs.file-max=32768
/usr/src/linux/include/linux/fs.h
で#define INR_OPEN 4096
/usr/src/linux/include/linux/limits.h
でしてカーネルを再コンパイルします#define NR_OPEN 4096
ulimit -HSn 4096
という方法もあります)FD_SETSIZE
のデフォルト値を増す
/usr/src/linux/include/linux/posix_types.h
でこれを先にかえてから、もろもろのプログラムをコンパイルします#define __FD_SETSIZE 4096
SOMAXCONN
のデフォルト値を増す
/usr/src/linux/include/linux/socket.h
でこれを先にかえてから、もろもろのプログラムをコンパイルします#define SOMAXCONN 1024
__FD_SETSIZE
の1/8から1/4ぐらいが適当)listen
(2), tcp
(7)を sysctl.conf に追加しますnet.core.rmem_max=1048576 net.core.wmem_max=1048576 net.core.rmem_default=65535 net.core.wmem_default=65535 net.core.optmem_max=20480 net.ipv4.tcp_rmem=4096 87380 1048576 net.ipv4.tcp_wmem=4096 16384 1048576 net.ipv4.tcp_mem=1048576 1048576 1048576
socket
(7), tcp
(7)を sysctl.conf に追加しますvm.bdflush=30 500 0 0 60 300 60 0 0
/usr/src/linux/Documentation/sysctl/vm.txt
kernel parameter memfrac= で zone_balance_ratio を調整diff -urN linux-2.4.23-orig/mm/page_alloc.c linux-2.4.23/mm/page_alloc.c --- linux-2.4.23-orig/mm/page_alloc.c 2003-11-29 03:26:21.000000000 +0900 +++ linux-2.4.23/mm/page_alloc.c 2003-12-12 21:05:42.000000000 +0900 @@ -41,7 +41,7 @@ static char *zone_names[MAX_NR_ZONES] = { "DMA", "Normal", "HighMem" }; static int zone_balance_ratio[MAX_NR_ZONES] __initdata = { 128, 128, 128, }; static int zone_balance_min[MAX_NR_ZONES] __initdata = { 20 , 20, 20, }; -static int zone_balance_max[MAX_NR_ZONES] __initdata = { 255 , 255, 255, }; +static int zone_balance_max[MAX_NR_ZONES] __initdata = { 255 , 1023, 255, }; static int lower_zone_reserve_ratio[MAX_NR_ZONES-1] = { 256, 32 }; int vm_gfp_debug = 0;
/usr/src/linux/Documentation/
以下を見る事/usr/src/linux/net/TUNABLE
も参考の事