1

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

我有一个运行 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 主机上运行良好。cannot allocate memory但是,当我在 Ubuntu VM 中运行它时,它似乎会抛出错误。奇怪的是,它也是零星的,并不总是发生。

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设置为所有者,组和其他人的执行和读写。

  • 阅读此问题后,我已关闭 APC以查看 APC 是否是原因,但这样做后问题仍然存在。

  • php-cli与 相同php.iniphp-fpm位于 中/etc/php/php.ini

  • memory_limitinphp.ini设置为128M(默认),这对于应用程序来说似乎足够了。

  • 即使将内存限制增加到256M,错误仍然会发生。

  • VM 有 2GB 内存。

我一直在谷歌搜索以找出导致cannot allocate memory错误的原因,但没有发现任何有用的信息。什么可能导致这个问题?

4

1 回答 1

0

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

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

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

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

我已经使用这些新设置运行我的设置大约一个星期,并且自从进行更改后没有遇到任何内存分配错误。

于 2013-01-09T03:27:48.287 回答