3

我是一家大公司的开发人员,该公司有一些遗留代码,在导出函数上需要大量内存。为了解决这个问题, ini_set('memory_limit', '4G'); 用来。

问题是脚本因内存耗尽而崩溃。如果我将限制设置为 2G,则脚本将运行到最后。它甚至没有达到 1GB 的峰值内存使用量。

由于代码是版本化的并与公司的其他人共享,我无法更改限制,并且在我的本地安装中更改它很麻烦。

我的问题是:什么可以使脚本在 4GB 限制但不是 2GB 时崩溃?

PS:我的设置是一台运行 Debian 的虚拟机,带有 nginx 和 php-fpm。vm 有 4GB RAM(尽管改变它似乎没有任何区别)。


[更新]

创建了一个具有 64 位操作系统的新虚拟机,如果我将 vm 内存设置为 2GB,它就可以工作。(如果我使用 4GB 则不会)。由于我对 2GB 没问题,我将关闭此问题。

4

3 回答 3

3

这是一个自然的限制:2 甚至 4 Gbs 的地址空间用于文件映射,这也需要一些内存页面。

最终的解决方案是使用 64 位 PHP 解释器(即,如果可能,切换到 64 位系统)。

于 2012-05-29T08:15:06.327 回答
1

也许您使用的是 32 位系统?

好吧,如果您的虚拟机只有 4GB,那么您可能应该给它更多的内存。

于 2012-05-29T08:11:52.183 回答
1

在 32 位系统上,4GB 是内存空间的限制。我猜当 PHP 尝试获取 4GB 内存时可能会出现一些内存冲突。

于 2012-05-29T08:16:05.237 回答