php5.2.0ではメモリ管理が大幅に改善され、場合によってはメモリが解放されない問題は解消されました。
PHP スクリプト (mem.php) をテストするには、echo N>> と sleep を使用して、ステータスを検出するためにスクリプトが特定の段階で一時停止するように制御します。
コードをコピーします コードは次のとおりです:
echo '1>>'
$o = array(); =0;$ i<=100000;$i++) {
$o[]='aaaaaaaaaaaaaaaa';
echo '2>>'
unset($o); 3& gt;>
while (true) {
sleep(10);
?> 内部の「mem」が取得されます上記の php スクリプト名より):
while true;do clear;ps au|grep -v "(vi|grep)"|grep "(mem|RSS)";sleep 2;done
以下は $/usr です。 /local/bin/ php mem.php プロセスは 3 つの状態 (配列作成前、配列作成後、配列破棄後) にあり、PHP 5.1.6 と 5.2.0 (同じ設定パラメータを使用しました) を使用して 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)。
上記では、thinkpad e520 の内容を含め、thinkpad e520 php520 のメモリ管理の改善点を紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。