Why is my Docker Symfony project consuming so much memory?
我正在生产中部署我的symfony项目。 当我简单地运行
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried
to allocate 20480 bytes) in
/var/www/redaph/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php
on line 107Fatal error: Allowed memory size of 134217728 bytes exhausted (tried
to allocate 65536 bytes) in
/var/www/redaph/vendor/composer/ClassLoader.php on line 444
奇怪的是,在我的dockerfile中,我指定我的PHP_MEMORY_LIMIT为256M。 当我进入容器时,会看到以下内容:
1 2 | root@125de315edca:/var/www/redaph# php -i | grep memory_limit memory_limit => 128M => 128M |
题
为什么我的Docker Symfony项目占用了如此多的内存?
如果正常,则:
如何正确增加我的dockerfile中的PHP_MEMORY_LIMIT?
deploy_prod.sh
1 2 3 4 5 |
Dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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 |
问题似乎更可能是应用程序的代码/配置。可能不需要触摸Docker。
根据您配置的处理程序,研究限制独白的缓冲区大小(此处的配置代码-搜索
使用Composer,在dev中本地运行
看起来这是根据您发布的dockerfile进行的操作,但是在此过程中某处可能正在发生/干扰该操作。我会验证
您还可以在运行composer时尝试使用标志
如果这还不够,请提供您使用的Symfony版本。发布与独白相关的
这将有助于了解发生错误的那些行上的内容。
关于如何更改您的限额:我的"正确方法",我基本上可以想到2种:
-
通过单线编辑将RUN放置在dockerfile中,这应该可以使用https://serverfault.com/questions/96372/sed-php-ini-memory-limit。
-
在本地保留一个php.ini文件,该文件将被复制到容器中。要使Docker复制它,请在docker-compose文件中的音量键下一行
- / ini /位置/在/本地:/ ini /位置/容器
对于您的情况,我觉得这很麻烦,只有在文件需要大量/连续编辑的情况下,我才会这样做,事实并非如此。
还有另一种选择,但是每次构建时都需要您这样做,但这并不是真的有用:
- 泊坞窗exec-无论bash
假设您拥有正确的工具(sed,vim和所需的任何工具),则可以从那里开始编辑文件。