9

我有一个运行大约 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 时脚本执行,但从未完成。

4

1 回答 1

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() (顺便说一下查看堆)返回时不会考虑这些内存。堆栈分配的变量将在 memory_get_usage() 被调用并返回时被清除。

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

于 2012-09-06T15:21:37.200 回答