it-swarm-ja.com

Composerが大量のメモリを消費するDockerSymfonyプロジェクトはなぜですか?

説明

Symfonyプロジェクトをprodにデプロイしています。 docker-compose upを実行するだけで問題なく動作します。ただし、デプロイスクリプトで問題が発生し、ナビゲーターでWebページにアクセスしてみます。

致命的なエラー:107行目の/var/www/redaph/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.phpで許可されたメモリサイズ134217728バイトが使い果たされました(20480バイトを割り当てようとしました)

致命的なエラー:444行目の/var/www/redaph/vendor/composer/ClassLoader.phpで許可されたメモリサイズ134217728バイトが使い果たされました(65536バイトを割り当てようとしました)

奇妙なことに、dockerfileで、PHP_MEMORY_LIMITを256Mにするように指定しています。コンテナに入ると、次のように表示されます。

[email protected]:/var/www/redaph# php -i | grep memory_limit
memory_limit => 128M => 128M

質問

Docker Symfonyプロジェクトが大量のメモリを消費するのはなぜですか?

これが正常な場合:dockerfileのPHP_MEMORY_LIMITを正しく増やすにはどうすればよいですか?

deploy_prod.sh

#!/usr/bin/env bash
PROJECT=symfony
docker-compose up -d
docker exec redaph_symfony_1 php bin/console d:s:u --force
docker exec redaph_symfony_1 php bin/console c:c

Dockerfile:

FROM php:7.2-Apache

ENV \
    [email protected] \
    PHP_TIME_ZONE=Europe/London \
    PHP_MEMORY_LIMIT=256M \
    PHP_UPLOAD_MAX_FILESIZE=32M \
    PHP_POST_MAX_SIZE=32M

ARG WORK_DIR

WORKDIR $WORK_DIR

COPY composer.lock $WORK_DIR
COPY composer.json $WORK_DIR

ENV COMPOSER_ALLOW_SUPERUSER 1

RUN apt-get update \
    && apt-get install -y -f apt-transport-https \
        libicu-dev \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        libpq-dev \
        acl \
        cron \
        git \
        Zip \
    && pecl install mongodb \
    && docker-php-ext-enable mongodb \
    && docker-php-ext-install \
        exif \
        Gd \
        intl \
        opcache \
        pdo_mysql \
        pdo_pgsql \
        Zip \
    && curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/composer \
    && composer install --no-dev --prefer-dist --optimize-autoloader --no-scripts \
    && chown -R www-data:www-data $WORK_DIR \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && a2enmod rewrite \
    && service cron start
1
kemicofa ghost

Dockerイメージに、ログが保存されているフォルダーへの書き込み権限がないため、モノログのメモリが不足している可能性があります(エラーのループ)。

解決策:logsフォルダーのアクセス許可を変更するか、「buffer_size」に関する情報を取得します: https://symfony.com/doc/2.0/reference/configuration/monolog.html (これが機能するかどうかわからないすべてのハンドラーで)

2
Intol