PHP 不能使用 300MB 内存

标签 php mod-php

我正在尝试增加某些 PHP 脚本的允许内存。不管我做什么,例如这个:

ini_set('memory_limit', '512M');

...脚本总是在 300MB 左右耗尽内存:

Fatal error: Out of memory (allocated 25165824) (tried to allocate 343810589 bytes) in \\Foo\phpQuery\phpQuery.php on line 255

我已经通过多种方式验证了 memory_limit 确实发生了变化。问题似乎是 PHP 无法物理分配总共 300 MB 的内存(25165824 字节 + 343810589 字节 = 352 MB)。

我已经在两台不同的基于 Windows 的计算机上尝试了 PHP/5.3.0 和 PHP/5.3.9,具有以下规范:

  • Windows XP/Windows Server 2003(两台电脑都是 1GB 或 RAM 的 32 位机器)
  • 官方 PHP 32 位 VC9 二进制文件
  • 作为 Apache 2.2 模块(第三方 32 位 VC9 二进制文件)运行

我知道使用一半的物理 RAM 会强制交换并减慢速度,但我只需要确保脚本确实有效,这样它就可以部署到实时服务器上。我还尝试了较大的值(产生相同的错误)和较小的值(使我的脚本达到极限或使 Apache 崩溃)。

这个明显硬编码的内存限制的来源是什么?

更新#1:我已经用 Windows Server 2003 机器(实际上是一个 VMWare 虚拟机)做了进一步的测试。我已将“物理”RAM 增加到 2 GB,并且已验证页面文件可以增长到 1152 MB。任务管理器显示当前事务负载为 886 MB,并且有 1.5 GB 的可用物理内存。但是,我遇到了同样的错误,完全相同的数字

更新 #2: 正如我所说,memory_limit 指令没问题。它出现在 ini_get()phpinfo() 中。您收到的错误消息与我的略有不同;我的指示 PHP 崩溃。请比较:

Out of memory (allocated 25165824) (tried to allocate 343810589 bytes)
Allowed memory size of 25165824 bytes exhausted (tried to allocate 343810589 bytes)

我将尝试编写一个脚本来重现问题并报告。

最佳答案

OOM 异常不同于内存限制警告。

这意味着 PHP 无法实际分配内存,因为您的操作系统中可用资源不足。

您需要检查系统是否有足够的可用内存/分页来支持此操作。

关于PHP 不能使用 300MB 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9078543/

相关文章:

php - Paypal IPN : Reading multiple item_name and quantities and saving to a database

PHP: memory_get_peak_usage(false),什么时候应该使用true?

php - 在 FastCGI 上从 PHP 运行后台进程

php - 非持久性 pg 连接

php - 如何在 GENTOO 操作系统的 Apache Web 服务器下配置 PHP?

php - 从 TIMESTAMP 字段返回结果

php - 在 firefox 错误中下载 csv 文件

php - 如何从 laravel blade 中的 json 数据创建分页链接

php - 我如何告诉 Apache2,默认运行 mod_php5,但在 CGI 模式下运行此 VH?