php5 2 0記憶體管理改進

2022-09-29 12:12:15 字數 1332 閱讀 8555

php5.2.0的記憶體管理做了較大的改進,某些情況下記憶體不能釋放的問題不存在了。

測試php指令碼(mem.php),我用echo n>>和sleep來控制指令碼在某個階段暫停以便檢測狀態。

複製** **如下:

<?php  

echo '1>>'; 

sleep(5); 

$o = array(); 

for ($i=0;$i<=100000;$i++)  

echo '2>>'; 

sleep(5); 

unset($o); 

echo '3>>'; 

while (true)  

?> 

監測記憶體使用情況的bash script(注意:裡面的」mem」是取自上面的php指令碼名):

while true;do clear;ps au|grep -v "\(vi\|grep\)"|grep "\bhwof(mem\|rss\)";sleep 2;done;

以下是$/usr/local/bin/php mem.php這個程序在三種狀態(陣列建立前,陣列建立後,陣列銷毀後)下,用5.1.6和5.2.0的php(我使用了一樣的configure引數)測試的rss(記憶體使用值,單位kb)結果。

php5.1.6:

3164

18076

17572

php5.2.0:

4088

14400

4424

大家可以看到5.1.6這個版本,unset陣列之後,記憶體並沒有從程序裡釋放出來,雖然它是可以繼續被這個php程式設計客棧程序再利用,但是卻無法被系統的其他程序所使用。而5程式設計客棧.2.0則真正釋放出了記憶體。

大家可能還注意到,在最開始,5.2.0的記憶體使用比5.1.6多了幾個kb,這是由於5.2.0增加了一些新的東西,這個是很正常的。

另外php5.2.0的記憶體分配也進行了大的改進,官方的說法是對memory_limit的檢測由每次呼叫emalloc()的時候進行改為直接檢測從系統請求的記憶體資料塊(blocks)。需要更進一步了解的朋友可以自己去研究**。而由於記憶體分配的實現的更改,記憶體控制可以更精確地被控制在memory_limit之下,也就是說以前php**裡,如果有超過了memory_limit的記憶體使用而沒有出錯的,在php5.2.0裡可能會報錯。為了平衡這次改進,php5.2.0的預設的memory_limit由以前的8mb改為了16mwww.cppcns.comb.搜尋源**可以看到這個修改(find . -name \*c -type f |xargs cat |grep memory_limit)。 

本文標題: php5.2.0記憶體管理改進

本文位址:

PHP 5 2 0 安裝成功

php 5.2.0 安裝成功 保管並退出。然後重啟 apach 伺服器。a pach 2.2.4 php 5.2.0 參照 php 官方 的說明裝置勝利 寫在這裡記錄一下過程。而是選擇下面的那個選項,裝置 apach 預設目錄。因為考慮到以後可能會用到 iis 所以在裝置時沒有選擇隨 window ...

PHP記憶體管理

var dump memory get usage a laruence var dump memory get usage unset a var dump memory get usage 輸出 在我的個人電腦上,可能會因為系統,php版本,載入的擴充套件不同而不同 int 90440 int ...

php記憶體管理簡介

摘要 程式先建立乙個 a變數,然後賦值 a變數為 helloworld 然後建立 b變數,把 a變數賦值給 b變數.在這裡我們要思考的是,現在記憶體情況是怎樣的.php記憶體管理簡介 程式先建立乙個 a變數,然後賦值 a變數為 helloworld 然後建立 b變數,把 a變數賦值給 b變數.在這裡...