使用Capifony部署Symfony2项目时出现致命错误


PHP Fatal error when deploying Symfony2 project using Capifony

在将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需要多少内存?我需要进一步增加吗?我以为这就够了。

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

现在,因为复杂性在这里扮演了重要的角色,你在哪里出错?在缓存预热/清理期间?您是否正在尝试运行一些自定义控制台命令?

还有,你有没有试过安装APC?这样做之后,我的应用程序就亮了起来:)

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

Symfony非常占用内存,虽然1Gb听起来很荒谬,但对于它所执行的处理类型来说,这绝对不是不可能的。如果它告诉你内存不足,你唯一的选择是添加更多的内存。

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

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

# /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
# /sbin/mkswap /var/swap.1
# /sbin/swapon /var/swap.1