为什么我的带有 Composer 的 Docker Symfony 项目消耗了这么多内存?

为什么我的带有 Composer 的 Docker Symfony 项目消耗了这么多内存?

描述

我正在 prod 中部署我的 symfony 项目。当我简单地运行 时,它工作正常docker-compose up。但是,我的部署脚本出现问题,我尝试在导航器中访问网页。

致命错误:/var/www/redaph/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php 第 107 行中允许的内存大小 134217728 字节已用尽(试图分配 20480 字节)

致命错误:/var/www/redaph/vendor/composer/ClassLoader.php 第 444 行中允许的内存大小 134217728 字节已用尽(试图分配 65536 字节)

奇怪的是,在我的 dockerfile 中,我指定希望 PHP_MEMORY_LIMIT 为 256M。当我进入容器时,我看到以下内容:

root@125de315edca:/var/www/redaph# php -i | grep memory_limit
memory_limit => 128M => 128M

问题

为什么我的 Docker Symfony 项目消耗这么多内存?

如果这是正常的,那么:如何正确增加dockerfile中的PHP_MEMORY_LIMIT?

部署生产环境

#!/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 \
    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

答案1

最有可能的是,您的 docker 镜像缺少存储日志的文件夹的写入权限,这导致 monolog 内存耗尽(错误循环)。

解决方案:更改日志文件夹的权限,或获取有关“buffer_size”的信息:https://symfony.com/doc/2.0/reference/configuration/monolog.html(不确定这是否适用于所有处理程序)

相关内容