php5.2.0ではメモリ管理が大幅に改善され、場合によってはメモリが解放されない問題は解消されました。
PHP スクリプト (mem.php) をテストするには、echo N> と sleep を使用して、ステータスを検出するためにスクリプトを特定の段階で一時停止するように制御します。
コードをコピー コードは次のとおりです。
echo '1>>';
sleep(5);
$o = array();
for ($i=0;$i $o[]=' aaaaaaaaaaaaaaaaa';
echo '2>>';
unset($o); '; 🎜>while (true) {
echo '..';
}
?> メモリ使用量を監視する Bash スクリプト (注: inside mem" は上記の php スクリプト名から取得されます):
while true;do clear;ps au|grep -v "(vi|grep)"|grep "(mem|RSS)";sleep 2 ; 完了;
以下は、PHP 5.1.6 および 5.2.0 を使用した 3 つの状態 (配列作成前、配列作成後、配列破棄後) の $/usr/local/bin/php mem.php プロセスです。同じ設定パラメーターを使用しました) RSS (メモリ使用量の値、単位 KB) のテスト結果。
php5.1.6:
3164
18076
17572
PHP5.2.0:
4088
14400
4424
見ることができますバージョン 5.1.6 では、配列の設定を解除した後、メモリはプロセスから解放されませんが、php プロセスでは引き続き再利用できますが、システム内の他のプロセスでは使用できません。そして、5.2.0 ではメモリが大幅に解放されます。
また、最初は 5.2.0 のメモリ使用量が 5.1.6 よりも数 kb 多かったことがわかります。これは、5.2.0 にいくつかの新しい機能が追加されたためです。正常です。
さらに、php5.2.0 のメモリ割り当ても大幅に改善されており、公式には、emalloc() が呼び出されるたびに、memory_limit の検出が要求されたメモリ データ ブロックを直接検出するように変更されています。システム (ブロック)。もっと詳しく知りたい友達は、自分でコードを勉強することができます。メモリ割り当ての実装が変更されたため、memory_limit でメモリ制御をより正確に制御できるようになりました。つまり、以前の PHP コードで、エラーなしでメモリ使用量がmemory_limit を超えた場合、PHP5.2.0 レポートに含まれる可能性があります。エラーです。この改善のバランスをとるために、PHP5.2.0 のデフォルトのmemory_limit は以前の 8MB から 16MB に変更されました (find . -name *c -type f |xargs cat |grep memory_limit)。