MaxClients の適正値を求める / 画像(静的コンテンツ)用サーバ
投稿日: 2003年12月05日 更新日: 2017年07月22日
MaxClients の適正値を求める
竹迫さんのmod_perl における C10K Problemを参考に。メモリ容量から計算する。prefork な Apache の場合です。
Apache の最大メモリ消費量=MaxClients×子プロセスのメモリ消費量+親プロセスのメモリ消費量
なのでまずは「子プロセスのメモリ消費量」と「親プロセスのメモリ消費量」を求める。
例えば TOP コマンドの結果がこんな感じだったとする
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
21419 httpd 16 0 5616 5412 2852 R 4.7 2.1 0:00 0 httpd
21144 httpd 15 0 5708 5500 2896 S 4.5 2.1 0:01 0 httpd
21312 httpd 16 0 6192 5984 2868 R 3.7 2.3 0:00 0 httpd
21244 httpd 15 0 6224 6020 2872 S 3.1 2.3 0:01 0 httpd
21168 httpd 16 0 6540 6328 2888 S 2.9 2.4 0:02 0 httpd
21297 httpd 15 0 6000 5796 2880 S 2.9 2.2 0:01 0 httpd
20535 httpd 16 0 6544 6332 2888 S 1.9 2.4 0:06 0 httpd
21417 httpd 16 0 5012 4804 2620 R 1.3 1.8 0:00 0 httpd
21418 httpd 15 0 5588 5380 2860 S 1.3 2.1 0:00 0 httpd
21406 httpd 16 0 4420 4212 2672 S 1.1 1.6 0:00 0 httpd
1050 root 15 0 0 0 0 SW 0.7 0.0 3:48 0 kjournald
2012 root 15 0 236 216 160 S 0.3 0.0 2:37 0 syslogd
28733 root 23 0 488 4 0 S 0.3 0.0 68:53 0 pound
21323 httpd 15 0 6096 5748 2864 S 0.3 2.2 0:00 0 httpd
21186 httpd 15 0 5628 5420 2896 S 0.1 2.1 0:00 0 httpd
httpd の SIZE が「親プロセスのメモリ消費量」、SIZE − SHARE(親プロセスと共用している部分) が「子プロセスのメモリ消費量」になる
MaxClients は現在デフォルトの150に設定されている、ということは
Apache の最大メモリ消費量=150×(6MB−2.8MB)+6MB=486MB
搭載メモリが 256MB なので MaxClients 150 は大きすぎる。MaxClients 50 だと最大メモリ消費量 160MB でちょうど良い。
メモリを増やしてMaxClientsを50以上にする必要があるかというと、
- CPU使用率を見る限り 50 以上の実行はきつい
- 昨日設置したMRTGの「BusyServers」のグラフはピーク時でも30程度
なので必要なし。
画像(静的コンテンツ)用サーバ
PHP 等を使わないただの画像へのリクエストにメモリを 6MB も食う Apache を使うのは効率が悪い。やはり画像サーバを立てて Pound で振り分けるほうが良い。
Esehttpd やモジュールを削った Apache
DocumentRoot を Apache と同じ場所に設定して空いているポートで動かす(例:8081)。
Pound
画像等へのアクセスを振り分け
http://www.geocities.co.jp/SiliconValley/1712/other/pound.htmlを参考に
UrlGroup ".*.(jpg|gif|png|css|js)$"
BackEnd 127.0.0.1,8081,1
EndGroup
を追加
Apache
もう KeepAlive は完全に必要なし
KeepAlive Off
名前:宮内 はじめ
Code for Nagoya名誉代表
E2D3名古屋支部長
プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。