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やデータビズが好きです。このサイトは宮内の個人的なメモです。

プロフィール

お問い合わせ