php - memory_limit : How does it work?

标签 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 时脚本执行,但从未完成。

最佳答案

尝试使用使用您的操作系统来报告实际内存的函数,例如这个。

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() 可能不适用于所有操作系统,尤其是取决于编译选项。

关于php - memory_limit : How does it work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12302446/

相关文章:

php - PayPal REST API 支付收款人

php - 无法连接到 mysql - 在 InMotion 托管上使用 PHP 7.1 设置 Laravel 5.8 时出错。多 PHP 版本

php - 如何使用 PHP 制作大数组 (26000 x 26000)?

PHP 仅显示来自 4 的第一张图片

php - 运行一次 PHP 函数

c - 解释值驻留在 Linux 32 位进程地址空间中的位置

ios - UIImage 比它的 NSData 占用更多的内存

Android (Jelly Bean Only) - MapActivity 覆盖导致内存不足错误

php - 如何将 PHP 的内存限制增加到 2GB 以上?

php - php中允许的内存大小为33554432字节耗尽(尝试分配43148176字节)