我有一个非常“非常规”的设置,如下所示:
我有一台运行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}}错误的原因,但没有发现任何有用的内容。可能导致这个问题的原因是什么?
答案 0 :(得分:0)
事实证明这是我的Windows共享的一个问题。也许是因为Windows 7是一个客户端操作系统,它没有经过调整以经常提供大量文件(在我的情况下会发生这种情况)。
要修复,请在注册表中设置以下键:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache
至1
HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size
至3
我使用这些新设置运行我的设置大约一周,并且在进行更改后没有遇到任何内存分配错误。