Composer proc_open():fork失败 - 无法分配内存

时间:2015-06-03 04:52:41

标签: out-of-memory composer-php centos7

我在运行php ~/composer.phar update时遇到与其他人相同的错误:

The following exception is caused by a lack of memory and not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details
Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///home/tea/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:974
Stack trace:
0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///home/te...', 974, Array)
1 phar:///home/tea/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php(974): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
2 phar:///home/tea/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php(784): Symfony\Component\Console\Application->getSttyColumns()
3 phar:///home/tea/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php(745): Symfony\Component\Console\Application->getTerminalDimensions()
4 phar:///home/tea/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php(675): Symfony\Component\Console\Application->getTerminalWidth()
5 phar:///home/tea/composer in phar:///home/tea/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php on line 974

...但是有一个实例:4GB RAM和4gb交换。免费RAM永远不会耗尽,更不用说可用/缓存的RAM,并且不会触及交换!

              total        used        free      shared  buff/cache   available
Mem:           3788         885        1908           9         993        2692
Swap:          3967           0        3967

这是第一次在这台新机器上运行作曲家更新,CentOS / CloudLinux 7.1(带有cPanel)。

绝望中,我试过了     # php -dmemory_limit=1G ../composer.phar update --no-scripts --prefer-dist 并且我尝试删除composer.lock和供应商文件,甚至尝试添加临时交换文件但它确实不会出现内存问题 - 错误可能被误导?

proc_open未被禁用,我也尝试禁用shell fork炸弹保护,但没有jive。

会喜欢抬头。

N.B。我知道提交composer.lock文件并进行作曲家安装的建议,但这个实例正用于dev(就像以前的CentOS / CloudLinux 6.x机器具有较小的资源规格一样)所以我们需要使用我们以前使用的相同方法。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。我的系统有1.5GB RAM可用,但这还不够...... Composer的内存耗得太快了。

我唯一的解决方案是清除缓存并更新到最新版本(1.4.2):

composer clear-cache

sudo composer selfupdate

答案 1 :(得分:2)

好的,所以CloudLinux将用户的内存限制为1024mb,因为当限制加倍到2048mb时它可以工作。

这与我们之前的服务器(CentOS / CloudLinux 6.x)上的设置相同,但看起来每个版本的CentOS都比其他版本的内存更多。

奇怪的是,使用--profile运行的作曲家显示它使用的最多是482mb。即使它在分叉时(如所建议的那样)仍然低于1024mb的限制。