
Apacheプロセスがなぜメモリを大量に消費しているのかを解明しようとしています
私のスライスの仕様 (1.5GB RAM、CentOS 5、Apache2、PHP 5.2、MySQL)
ご覧のとおり、上位のプロセスがメモリ全体のほぼ半分を消費しており、さらに多くのプロセスが生成されると、サーバーはほぼ停止し、頻繁にスワップに移行してクラッシュします。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd
Apache (および PHP) が大量のメモリを消費する原因について、何か心当たりのある方はいらっしゃいますか?
total used free shared buffers cached
Mem: 1545 827 718 0 3 111
-/+ buffers/cache: 713 832
Swap: 3071 103 2968
答え1
ほぼ間違いなく mod_php を実行しているため、mpm_prefork で apache を実行している可能性が高くなります。
負荷によってスワップが開始されるまでパフォーマンスが概ね問題ない場合、簡単な解決策は Apache の MaxClients を絞り始めることです。Apache がいつでもワーカー プロセスをフォークできる場合、負荷がかかるとスワップが開始されます。ワーカーが利用可能になるまでリクエストはキューに入れられるため、処理速度は低下しますが、スワップによる死ほど遅くはありません。
本当に厳密に調整する必要がある場合は、prefork apache mpm の使用をやめることを検討してください。つまり、PHP を FastCGI として実行します。PHP を FastCGI で実行する場合は、より優れた FastCGI プロセス マネージャー (--enable-fpm 構成オプション) を備えた PHP 5.3.3 へのアップグレードを検討してください。
php-fpm/worker は、旧式の mod_php よりもはるかにメモリ効率に優れています。PHP プロセスの数とは関係なく、Apache プロセス/スレッドの数を調整できます。また、メモリを大量に消費する PHP プロセスは、PHP 駆動型コンテンツの提供にのみ使用され、静的ファイルの提供には無駄になりません。
答え2
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd
Apache で実行されているのは WordPress だけですか? 最も気になるのは、PID 6765 の CPU 使用率が非常に高いことです。何が起きているのか不思議です。mem%s に関しては、各スレッドが実際には複数のワーカーを実行しているため、Web アプリケーションの設定では非常に正常なようです。
Apache に使用している MPM は何ですか? また、どのように設定していますか?
また、ターミナルダンプを投稿する場合は、各行を 4 つのスペースで始めてください。これにより、フォーマットが保持されます。
答え3
私の水晶玉は少し埃っぽいですが、あなたはメモリキャッシュおよびその PHP 拡張機能。その場合は、本当に必要な場合を除いて無効にしてみてください。
もう一つの可能性は、次のようなオペコードキャッシュがあるということです。Xキャッシュをインストールし、大量のメモリを使用するように設定しました。
試してみるといいでしょう
pmap -x `pidof apache`
メモリを消費しているものを確認します。
答え4
未使用の Apache モジュール (Python、Perl など) をロードしないでください。
eAccelerator PHP モジュールを使用します。これは PHP コンパイラです。実行速度が速くなり、メモリ使用量が少なくなります。
他のユーザーも正しいかもしれません。