require_once:无法分配内存

时间:2012-12-26 23:43:29

标签: memory-management php

我有一个非常“非常规”的设置,如下所示:

我有一台运行Ubuntu Desktop 12.10的VMware虚拟机,网络设置为桥接。安装在VM内部的是nginx,php-fpm,php-cli和MySQL。 PHP是5.4.10。

我有一个文件夹,其中包含我在主机上工作的应用程序的所有文件(Windows 7)。然后,此文件夹可用作网络共享。

然后,虚拟机通过samba将Windows共享安装到目录中。然后该目录由nginx和php-fpm提供。到目前为止,一切都运行良好。

我有一个脚本,我通过php CLI运行,以帮助我构建和处理一些文件。以前,这个脚本在我的Windows主机上运行良好。但是,当我在Ubuntu VM中运行它时,似乎会抛出cannot allocate memory错误。奇怪的是,它也是零星的并且不会一直发生。

user@ubuntu:~$ sudo /usr/local/php/bin/php -f /www/app/process.php 

Warning: require_once(/www/app/somecomponent.php): failed to open stream: Cannot allocate memory in /www/app/loader.php on line 130

Fatal error: require_once(): Failed opening required '/www/app/somecomponent.php' (include_path='.:/usr/local/php/lib/php') in /www/app/loader.php on line 130

我已检查并确认以下内容:

  • /www/app/somecomponent.php肯定存在。

  • /www及其中所有文件和子目录的权限设置为执行,读取+写入所有者,组和其他人。

  • 我在阅读this question之后关闭了APC,看看APC是否是原因,但问题仍然存在。

  • php-cli使用与php.ini相同的php-fpm/etc/php/php.ini位于memory_limit

  • php.ini中的128M设置为256M(默认),这对应用来说似乎很充分。

  • 即使将内存限制增加到cannot allocate memory,仍会出现错误。

  • VM有2GB内存。

我一直在谷歌上搜索导致{{1}}错误的原因,但没有发现任何有用的内容。可能导致这个问题的原因是什么?

1 个答案:

答案 0 :(得分:0)

事实证明这是我的Windows共享的一个问题。也许是因为Windows 7是一个客户端操作系统,它没有经过调整以经常提供大量文件(在我的情况下会发生这种情况)。

要修复,请在注册表中设置以下键:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache1

HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size3

我使用这些新设置运行我的设置大约一周,并且在进行更改后没有遇到任何内存分配错误。