我是一家大型公司的开发人员,它有一些遗留代码,需要在导出功能上有大量内存。为了解决这个问题,ini_set('memory_limit','4G');使用。
问题是脚本因内存耗尽而崩溃。如果我将限制设置为2G,脚本将运行到最后。它甚至达不到1GB的峰值内存使用量。
由于代码是版本化的并与公司的其他人共享,因此我无法更改限制并在本地安装上更改它很麻烦。
我的问题是:什么可以使脚本崩溃4GB限制而不是2GB?
PS:我的设置是使用nginx和php-fpm运行Debian的虚拟机。 vm有4GB RAM(虽然改变这似乎没有任何区别)。
[更新
创建了一个具有64位操作系统的新虚拟机,如果我将vm内存设置为2GB,则可以正常运行。 (如果我使用4GB则没有)。 由于我对2GB没问题,我将关闭这个问题。
答案 0 :(得分:3)
这是一个自然的限制:2个甚至4 Gbs的地址空间也用于文件映射,这也占用了一些内存页。
最终解决方案是使用64位PHP解释器(即,如果可能,切换到64位系统)。
答案 1 :(得分:1)
也许您使用的是32位系统?
如果你的VM只有4GB,那么你可能应该给它更多的内存。
答案 2 :(得分:1)
在32位系统上,4GB是内存空间的限制。我想当PHP试图获得4GB内存时可能会有一些内存违规。