この記事をどこかで読みました:
「プレーンな Apache サーバーでは、多くの子プロセスを実行してもあまり問題になりません。プロセスはそれぞれ約 1 MB (ほとんどが共有されています) であるため、多くの RAM を消費しません。状況は異なります。 mod_perl, プロセスは簡単に 10 MB 以上に拡大できます. たとえば、MaxClients を 50 に設定した場合、メモリ使用量は 50 × 10 MB = 500 MB になります. mod_perl サーバー専用の 500 MB の RAM がありますか? "
サーバーで mod_perl を使用していません。apache2 で Phusion パッセンジャーと Ruby on Rails を使用しています。私は prefork MPM を使用しており、MaxClients はデフォルトの 256 に設定されています。つまり、いつでも 256 のプロセスを同時に実行できます。私は 256 個の apache2 プロセスを同時に実行したことがなく、通常は常に 80 個の apache2 プロセスしか実行していないため、この記事に興味を持ちました。しかし、80 だけでもサーバーが停止し、サイトを読み込もうとするとサイトがハングアップすることがあります。
次のコマンドを実行すると、80 個の apache2 プロセスが表示されることがあります。たとえば、次のようになります。
ps aux | grep apache2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1130 0.0 0.1 149080 10600 ? Ss 12:36 0:00 /usr/sbin/apache2 -k start
www-data 2051 0.0 0.3 163608 23592 ? S 16:46 0:00 /usr/sbin/apache2 -k start
www-data 2506 0.0 0.1 149376 7952 ? S 16:47 0:00 /usr/sbin/apache2 -k start
www-data 5149 0.0 0.1 149416 7980 ? S 16:49 0:00 /usr/sbin/apache2 -k start
www-data 5175 0.0 0.1 149368 7876 ? S 16:49 0:00 /usr/sbin/apache2 -k start
www-data 10212 0.0 0.1 149368 7848 ? S 16:53 0:00 /usr/sbin/apache2 -k start
www-data 19114 0.0 0.1 149368 7904 ? S 17:01 0:00 /usr/sbin/apache2 -k start
www-data 19138 0.0 0.1 150768 11856 ? S 17:01 0:00 /usr/sbin/apache2 -k start
www-data 20592 0.0 0.1 149428 8092 ? S 16:35 0:00 /usr/sbin/apache2 -k start
www-data 21336 0.0 0.1 149368 7808 ? S 17:03 0:00 /usr/sbin/apache2 -k start
www-data 21375 0.0 0.1 149432 7916 ? S 17:03 0:00 /usr/sbin/apache2 -k start
1000 26458 0.0 0.0 8112 896 pts/6 S+ 17:07 0:00 grep apache2
www-data 30848 0.0 0.1 149396 8044 ? S 16:43 0:00 /usr/sbin/apache2 -k start
しかし、メモリの下では、それらは 0.1 から 0.4 の範囲であり、多くのメモリのようには見えません。私の質問は、ブラウザーからサイトにリクエストを送信するときに、新しい apache2 プロセスを親 apache2 プロセスの子プロセスとして生成することに加えて、パッセンジャーも別のプロセスを作成しますか? top コマンドを実行すると、%100 CPU で ruby プロセスが表示されることがあります。ruby プロセスが何らかの形でパッセンジャーを介して apache2 プロセスにリンクされているのではないかと思っています。その記事が述べたように、何かがこれらのプロセスを大量のメモリ消費者に成長させているに違いありません。私が見ていない何かがあるはずです。
ちなみに、マシンには 5 ギガ以上のメモリがあります。
$ cat meminfo
MemTotal: 6113156 kB