为什么我的Docker Symfony项目消耗了如此多的内存?

kem*_*ica 6 php symfony composer-php docker docker-compose

描述

我正在prod中部署我的symfony项目.我只是跑步时工作正常docker-compose up.但是我的部署脚本出现问题,尝试访问导航器中的网页.

致命错误:第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.当我进入我的容器时,我看到以下内容:

root@125de315edca:/var/www/redaph# php -i | grep memory_limit
memory_limit => 128M => 128M
Run Code Online (Sandbox Code Playgroud)

为什么我的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
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM php:7.2-apache

ENV \
    APACHE_ADMIN_EMAIL=webmaster@localhost \
    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
Run Code Online (Sandbox Code Playgroud)

jst*_*tur 2

问题似乎更有可能是您的应用程序的代码/配置。Docker可能不需要动。

根据您配置的处理程序,研究限制独白的缓冲区大小(此处配置代码- 搜索buffer_size)。

使用 Composer,composer update在 dev 本地运行。部署时,运行composer install. 假设 install 需要使用 a ,则需要比解析依赖关系图update更多的内存。installcomposer.lock

看起来这就是根据您发布的 dockerfile 所做的事情,但也许在此过程中的某个地方正在发生/干扰其他事情。我会验证composer.lock包含您认为它的作用,以防万一。

memory_limit=-1您还可以在运行 Composer 时尝试该标志:

php -d memory_limit=-1 composer install rest-of-args-here

如果这还不够,请提供您正在使用的 Symfony 版本。发布您composer.json和 Symfony 与 monolog 相关的配置。