【问题标题】:Composer proc_open(): fork failed - Cannot allocate memoryComposer proc_open(): fork failed - 无法分配内存
【发布时间】:2015-08-17 03:10:13
【问题描述】:

我在运行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

...但使用 large 实例: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 (with cPanel) 上运行 composer update。

无奈之下,我试过了 # php -dmemory_limit=1G ../composer.phar update --no-scripts --prefer-dist 我已经尝试删除 composer.lock 和 vendor 文件,甚至尝试添加临时交换文件但它似乎真的不是内存问题 - 错误会被误导吗?

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

很想提醒一下。

注意我知道提交 composer.lock 文件并进行 composer install 的建议,但是这个实例被用于开发(就像以前的 CentOS/CloudLinux 6.x 机器一样,资源规格更小),所以我们需要使用我们以前使用的方法相同。

【问题讨论】:

  • 我遇到了同样的问题,增加了内存,但是没有用。但是增加 - max_execution_time = 300 和 max_input_time = 300 以及 2048MB 的内存对我有用
  • 将交换空间增加到 4GB,为我解决了这个问题

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


【解决方案1】:

当您的内存资源不足并且您没有启用交换时会发生这种情况,我遇到了同样的问题并使用下面的这几个命令进行了修复,或者您可以创建一个交换分区或文件,只需确保您激活交换.

$ /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024

$ /sbin/mkswap /var/swap.1

$ /sbin/swapon /var/swap.1

我希望它对你有用...

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。我的系统有 1.5GB 的可用 RAM,但还不够……Composer 很快就吃掉了太多的内存。

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

    composer clear-cache
    
    sudo composer selfupdate
    

    【讨论】:

    • 运行最新版本并清除缓存对我不起作用。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-27
      • 2017-09-24
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2019-03-01
      • 2017-06-15
      • 1970-01-01
      相关资源
      最近更新 更多