我在运行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机器具有较小的资源规格一样)所以我们需要使用我们以前使用的相同方法。
答案 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的限制。