【问题标题】:memory_limit problem while running composer install on Symfony gitlab CI在 Symfony gitlab CI 上运行 composer install 时出现 memory_limit 问题
【发布时间】:2022-12-07 06:34:05
【问题描述】:

我正在尝试为 Symfony 项目添加 Gitlab CI,在构建阶段我有一个安装所需扩展和库的脚本,最后运行composer install

apt-get update -yqq \
&& apt-get install git libcurl4-gnutls-dev libicu-dev libmcrypt-dev libvpx-dev libjpeg-dev libpng-dev libxpm-dev zlib1g-dev libfreetype6-dev libxml2-dev libexpat1-dev libbz2-dev libgmp3-dev libldap2-dev unixodbc-dev libpq-dev libsqlite3-dev libaspell-dev libsnmp-dev libpcre3-dev libtidy-dev libzip-dev libonig-dev -yqq \
&& docker-php-ext-install mbstring pdo_mysql curl json intl gd xml zip bz2 opcache \
&& pecl install xdebug \
&& docker-php-ext-enable xdebug \
&& curl -sS https://getcomposer.org/installer | php \
&& php composer.phar install

问题是我得到 memory_limit 错误如下:

!!  
!!  In 40bd61cdac921aa5789618d083759e080acd3c990e06953a3380ae5c5e1156fa.php line 3768:
!!                                                                                 
!!    Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate   
!!    122880 bytes)                                                                
!!                                                                                 
!!  
!!  cache:clear [--no-warmup] [--no-optional-warmers]
!!  
!!  

我试图将 PHP memory_limit 从 128M 增加到 256M,但它不起作用。我尝试了以下内容:

php -d memory_limit=256M composer.phar install

我也试过 php -r "ini_set('memory_limit', '256M');" 但它也没有任何效果。

关于如何解决这个问题的任何建议?

使用此命令为我解决:

sed -i -e "s/\(memory_limit = \).*/\1256M/" $PHP_INI_DIR/php.ini

它直接编辑 php.ini 文件中的 memory_limit 值。

【问题讨论】:

    标签: php symfony composer-php gitlab-ci


    【解决方案1】:

    你的 git 仓库中有 composer.lock 吗?安装 normaly 很快,不需要大量内存,因为没有依赖树生成。如果你没有提交你的 composer.lock 你真的应该。 (这也确保您使用与本地相同的版本。没有奇怪的错误,因为使用的版本不同)

    您也可以尝试:
    php -d memory_limit=-1 composer install

    【讨论】:

    • 我确实有一个 composer.lock,当 memoery_limit 为 128M 时,我通常会在我正在处理的项目中遇到 memory_limit 错误。改成256M就好了。现在我使用sed 命令解决了这个问题,并直接编辑了 php.ini 文件。
    • 也许它是由作曲家调用的一些 post_script
    【解决方案2】:

    你的 docker 镜像怎么样?您可以尝试修改构建 docker 映像中的 php.ini。前任。在 docker 文件中添加 memory_limit。

    echo 'memory_limit = 512M' >> /etc/php.d/docker-gitlab-ci-runner-php.ini
    

    【讨论】:

    • 我使用sed -i -e "s/(memory_limit = ).*/U6M/" $PHP_INI_DIR/php.ini 解决了这个问题。
    【解决方案3】:

    或者你可以使用 gitlab 官方推荐的解决方案:https://docs.gitlab.com/ee/ci/examples/php.html#custom-php-configuration-in-docker-builds

    1. 使用您的 php.ini 配置创建一些文件,例如my_php.ini 并将memory_limit = 512M 放入其中

    2. 将以下代码放入您的 .gitlab-ci.yml 中:

      之前_脚本:

      • cp my_php.ini /usr/local/etc/php/conf.d/test.ini

      说明:它只会将 my_php.ini 复制到 /usr/local/etc/php/conf.d/ 中,它应该会立即运行。我自己测试了它并且有效。

      有用信息: 如果您需要调试目的,请不要犹豫输入before_script 例如php --ini 以查看加载的 php.ini 文件列表或使用 php -r "echo ini_get('memory_limit');" 以查看您当前拥有的确切内存限制

    【讨论】:

      猜你喜欢
      • 2019-06-26
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 2020-03-29
      • 2021-07-10
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多