これらのコンポーネントを使用する PHP アプリケーションがあります。
- Centos 5.4 上の Apache 2.2.3-31
- PHP 5.2.10
- リモートデバッグが有効になっている Xdebug 2.0.5
- APC 3.0.19
- Doctrine ORM for PHP 1.2.1 クエリキャッシングと APC 経由の結果キャッシングを使用
- クエリ キャッシングを使用する MySQL 5.0.77
Apache を起動すると、最終的に 10 個の子プロセスが作成されることに気付きました。時間が経つにつれて、各プロセスは使用可能なメモリの 10% に近づくまでメモリ内で増加します。これにより、サーバーが低速になり始め、メモリの 100% を占有するようになるためです。
これが私のトップ出力のスナップショットです。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1471 apache 16 0 626m 201m 18m S 0.0 10.2 1:11.02 httpd
1470 apache 16 0 622m 198m 18m S 0.0 10.1 1:14.49 httpd
1469 apache 16 0 619m 197m 18m S 0.0 10.0 1:11.98 httpd
1462 apache 18 0 622m 197m 18m S 0.0 10.0 1:11.27 httpd
1460 apache 15 0 622m 195m 18m S 0.0 10.0 1:12.73 httpd
1459 apache 16 0 618m 191m 18m S 0.0 9.7 1:13.00 httpd
1461 apache 18 0 616m 190m 18m S 0.0 9.7 1:14.09 httpd
1468 apache 18 0 613m 190m 18m S 0.0 9.7 1:12.67 httpd
7919 apache 18 0 116m 75m 15m S 0.0 3.8 0:19.86 httpd
9486 apache 16 0 97.7m 56m 14m S 0.0 2.9 0:13.51 httpd
実行時間の長いスクリプトはありません (最終的にはすべて終了し、最長でもおそらく 2 分かかります)。各スクリプトが終了すると、スクリプトが使用するメモリの割り当てが解除されるという前提で作業しています。(多分誰かがそれについて私を修正することができます)。
私の推測では、APC はリクエスト間のデータを保存するため、APC である可能性がありますが、同時に、httpd プロセス内にデータを保存するのは奇妙に思えます。
アプリのどの部分がメモリ リークを引き起こしているかを追跡するにはどうすればよいですか?
httpd プロセス内でメモリ使用量がどのように増加しているか、およびその原因を確認するには、どのツールを使用できますか?