4

我需要运行一个 PHP CLI 脚本并为其提供大量内存(它是一个自动文档生成器,需要涵盖大量代码库)。我有一台功能强大的机器,并在脚本文件的内联声明中php.ini和内联声明中为 php 分配了 5GB。ini_set('memory_limit','5120M')

如果我将这些行添加到脚本的顶部:

phpinfo();
exit();

...它声称它的内存限制为 5120M,正如我指定的那样。

但是脚本仍然出错,说

Fatal error: Allowed memory size of 1073741824 bytes exhausted

...这是 1GB,而不是我指定的 5GB。

脚本是否还有其他地方可以确定其内存限制?这是在 Fedora Linux 中运行的。

(是的,最终的解决方案可能是重写脚本以提高效率,但我并没有首先编写它,所以在我诉诸于此之前,我只想向它投入资源,看看它是否有效。 )

4

1 回答 1

5

堆限制属性是 size_t,在 32 位机器上是 32 位。如果这是以字节为单位,这会将内存限制限制为 4 GB。您可以尝试在 64 位机器上运行它,使用 64 位 PHP。

编辑:确认,heap->limit 是 size_t (unsigned int) 并且以字节为单位。-1 的 memory_limit 将 heap->limit 设置为 4GB,并且不会像文档所暗示的那样禁用它。将其设置为 5GB 使其环绕至 1GB。

于 2010-07-23T13:53:26.650 回答