3

将 Symfony2 项目部署到服务器时,我偶尔会收到以下错误:

PHP Fatal error:  Uncaught exception 'ErrorException' with message 'proc_open(): 
fork failed - Cannot allocate memory' in 
in phar:///var/www/xyz.co.uk/releases/20130320161122/composer.phar/vendor/
symfony/console/Symfony/Component/Console/Application.php:982

更新

完整的错误消息如下--> Updating Composer dependencies

*** [err :: x.xx.xx.xxx] PHP Fatal error:  Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///var/www/xyz.co.uk/releases/20130320161815/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:982
*** [err :: x.xx.xx.xxx] Stack trace:
*** [err :: x.xx.xx.xxx] #0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///var/www...', 982, Array)
*** [err :: x.xx.xx.xxx] #1 phar:///var/www/xyz.co.uk/releases/20130320161815/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php(982): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
*** [err :: x.xx.xx.xxx] #2 phar:///var/www/xyz.co.uk/releases/20130320161815/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php(900): Symfony\Component\Console\Application->getSttyColumns()
*** [err :: x.xx.xx.xxx] #3 phar:///var/www/xyz.co.uk/releases/20130320161815/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php(865): Symfony\Component\Console\ in phar:///var/www/xyz.co.uk/releases/20130320161815/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php on line 982
*** [deploy:update_code] rolling back
failed: "sh -c 'sh -c '\\''cd /var/www/xyz.co.uk/releases/20130320161815 && php composer.phar update --no-scripts --verbose --prefer-dist'\\'''" on x.xx.xx.xxx

这不会一直发生,但有时会发生。我在服务器上的 apache 和 cli php.ini 文件中分配了 256M,但有时仍会收到错误消息。

Symfony 需要多少内存?我需要进一步增加吗?我以为这就够了。

4

3 回答 3

1

根据 GitHub 上的这篇文章:https ://github.com/composer/composer/issues/945看起来您至少需要1GB 的内存可供 PHP 使用。

Symfony 是一个相当大的内存消耗者,虽然 1Gb 可能听起来很荒谬,但对于它执行的处理类型来说,它绝对不是不可能的。如果它告诉您内存不足,您唯一的选择是添加更多内存。

您可能还想在一周左右的时间回来查看,看看他们是否也没有修补某种内存泄漏。

于 2013-03-20T16:16:02.567 回答
1

是的,Symfony总是比大多数框架重,但这个错误有点荒谬。我这样说是因为我的生产机器总共有 512MB 的 RAM,而 128M 分配给 PHP - 而且,应用程序仍然表现出色。

现在,因为复杂性确实在这里发挥了重要作用,所以你的错误发生在哪里?在缓存预热/清理期间?您是否尝试运行一些自定义控制台命令

另外,你试过安装APC吗?这样做之后,我的应用程序变得异常火爆:)

于 2013-03-20T16:46:16.617 回答
0

一些 symfony 部署需要大量内存来更新存储库。此外,如果您使用capifony,您可能会遇到很多内存错误。在小型 VPS 中部署或专用于少于 1-2 GB RAM 的技巧是创建一个 SWAP,您将在其中存储所需的内存。因此,例如,您可以尝试使用以下命令创建 1 GB 的交换:

# /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
# /sbin/mkswap /var/swap.1
# /sbin/swapon /var/swap.1
于 2015-03-20T01:01:52.083 回答