【发布时间】:2013-12-12 04:25:53
【问题描述】:
我有以下代码,它从数据库(相当多)接收数据并将它们传递给正在处理这些数据的函数。 代码如下所示。
for($o=0; $o<$times; $o++)
{
echo "Before Data: ".memory_get_peak_usage().PHP_EOL;
$data = $u->getDataLimit($id, $market, ($o*5000));
echo "After Data: ".memory_get_peak_usage().PHP_EOL;
echo "Before Process: ".memory_get_peak_usage().PHP_EOL;
$feed.= $p->process($data, ($o*5000) , 0, 0);
echo "After Process: ".memory_get_peak_usage().PHP_EOL;
$data = null; // or unset($data) doesnt matter.
echo "After All: ".memory_get_peak_usage().PHP_EOL.PHP_EOL;
}
这就是输出。
Before Data: 9587976
After Data: 37969952
Before Process: 37969952
After Process: 70166880
After All: 70166928
Before Data: 70166928
After Data: 83876232
Before Process: 83876232
After Process: 118233752
After All: 118233752
Before Data: 118233752
After Data: 141275760
Before Process: 141275760
After Process: 178939696
After All: 178939696
Before Data: 178939696
After Data: 202189192
Before Process: 202189192
After Process: 242915840
After All: 242915840
Before Data: 242915840
PHP Fatal error: Allowed memory size of 262144000 bytes exhausted (tried to allocate 32 bytes) in /var/www/repricing/repricing/library/Zend/Db/Statement/Pdo.php on line 290
memory_get_usage() 的输出:
Before Data: 9476792
After Data: 37943024
Before Process: 37969952
After Process: 70182072
After All: 56630760
Before Data: 56630760
After Data: 83864432
Before Process: 83897400
After Process: 118242320
After All: 113905024
Before Data: 113905024
After Data: 141247528
Before Process: 141278200
After Process: 178989656
After All: 174954320
Before Data: 174954320
After Data: 202216704
Before Process: 202251672
After Process: 243004472
After All: 241208824
Before Data: 241208824
PHP Fatal error: Allowed memory size of 262144000 bytes exhausted (tried to allocate 95 bytes) in /var/www/repricing/repricing/library/Zend/Db/Statement/Pdo.php on line 290
在我看来,PHP 并没有释放$data,而是将其全部放在首位?
$feed 只是一个字符串。不是很大。
我不明白为什么该脚本内存不足。以及为什么它不释放数据。
【问题讨论】:
-
可能问题出在
getDataLimit和process函数中? -
那么
$o*5000值在$u->getDataLimit()和$p->process()中的作用是什么?
标签: php performance memory-management memory-leaks