memory_limit:它是如何工作的?

时间:2012-09-06 14:33:33

标签: php memory memory-limit

我有一个运行大约2个小时的PHP脚本。这是一个cron工作。 cron工作每4个小时运行一次。

在脚本结束时,我会显示一些内存值。

The memory_get_usage() result is 881568 Bytes (0.840766906738M)
The memory_get_peak_usage() result is 1340304 Bytes (1.27821350098M)
The memory_get_usage(true) result is 1572864 Bytes (1.5M)
The memory_get_peak_usage(true) result is 1835008 Bytes (1.75M)

php.ini中的memory_limit是128M,但它不起作用。我将它提升到256M,现在它可以工作。

但是由于脚本的内存峰值小于2M ....

那么memory_limit参数如何工作?

是脚本使用的总内存吗?如果是这样,我该怎么计算呢?

是脚本的内存峰值吗?如果是的话,我计算得对吗?

我正在使用php 5.3.16。

修改

我没有任何错误消息。当限制为128M时脚本执行,但永远不会完成。

1 个答案:

答案 0 :(得分:3)

尝试使用使用操作系统的功能来报告实际内存,例如此内容。

function unix_get_usage() { 
      $pid = getmypid(); 
      exec("ps -o rss -p $pid", $output); 
      return $output[1] *1024; 
 }

function windows_get_usage(){
    $output = array();
    exec('tasklist /FI "PID eq '.getmypid().'" /FO LIST', $output );
    return preg_replace( '/[^0-9]/', '', $output[5] ) * 1024;
}

你的脚本可能会消耗大量的内存,PHP从memory_get_usage()(它查看堆btw)返回时不会考虑这些内存。

,当memory_get_usage()被调用并返回时,堆栈分配的变量将被清除。

您还应尝试在执行期间的其他位置运行此功能和其他功能,例如在大MySQL调用或文件处理之后。 memory_get_peak_usage()可能不适用于所有操作系统,特别是取决于编译选项。