Afinogen
@Afinogen
PHP разработчик

Почему phpfpm+nginx в docker работают медленней?

Решил я все завернуть в контейнеры докера на проде. Для разработки уже давно перешли на докер.
Запустилось все отлично, конфиги перенес с прода, поправил только пути.
Но стали поступать жалобы что стал тормозить сайт. Проверил, действительно скорость ответа увеличилась в 2(!!) раза. php очень прилично начал есть CPU, примерно так же в 2 раза больше. По ОП изменений нет.
Начал искать причину, методом тыка переводил сервисы из докера на железку. Так и выяснил, что nginx+php-fpm прекрасно работают со всеми контейнера докера и сайт не тормозит если они не в контейнере...
Для визуализации два графика из яндекс танка
Железо
Докер

Dockerfile nginx
FROM nginx:1.17.4

ARG SERVER_UID
RUN usermod -u $SERVER_UID www-data && groupmod -g $SERVER_UID www-data

COPY ./config /etc/nginx

RUN ln -sf /dev/stdout /var/log/nginx/site.ru.access.log \
        && ln -sf /dev/stderr /var/log/nginx/site.ru.error.log \


Dockerfile php-fpm
FROM php:7.2.34-fpm

## Install dependeses
RUN apt-get update && mkdir -p /usr/share/man/man1 && \
    apt-get install --yes --no-install-recommends git unzip wget mc ssh \
    default-mysql-client default-jdk default-jre locales ghostscript \
    libssl-dev \
    zlib1g-dev libzip-dev libicu-dev libpng-dev libxml2-dev libldap2-dev libmemcached-dev libmagickwand-dev

RUN sed -i -e 's/# ru_RU.UTF-8 UTF-8/ru_RU.UTF-8 UTF-8/' /etc/locale.gen && \
    locale-gen
ENV LANG ru_RU.UTF-8
ENV LANGUAGE ru_RU:en
ENV LC_ALL ru_RU.UTF-8

##Configure php extension
RUN docker-php-ext-configure intl
##Install php extension
RUN docker-php-ext-install zip gd mbstring pdo_mysql soap intl
RUN pecl install redis memcached imagick
RUN docker-php-ext-enable redis memcached imagick
RUN docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ && \
    docker-php-ext-install ldap
RUN docker-php-ext-install calendar && docker-php-ext-enable calendar


ENV EXT_MONGODB_VERSION=1.3.4

RUN docker-php-source extract \
    && git clone --branch $EXT_MONGODB_VERSION --depth 1 https://github.com/mongodb/mongo-php-driver.git /usr/src/php/ext/mongodb \
    && cd /usr/src/php/ext/mongodb && git submodule update --init \
    && docker-php-ext-install mongodb \
    && rm -rf /usr/src/php/ext/mongodb

RUN apt-get autoremove -y \
    && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* /usr/share/man/man1/* /var/cache/apt/archives/* \
    && docker-php-source delete && rm -rf ~/.pearrc

## Install Composer
#ENV COMPOSER_HOME=/var/www/.compose
RUN curl -sS https://getcomposer.org/installer \
  | php -- --install-dir=/usr/local/bin --filename=composer  --version=1.10.19
RUN composer diagnose

## Set user uid
ARG SERVER_UID
RUN usermod -u $SERVER_UID www-data && groupmod -g $SERVER_UID www-data

WORKDIR /var/www/html


В чем может быть причина?
  • Вопрос задан
  • 836 просмотров
Решения вопроса 1
Afinogen
@Afinogen Автор вопроса
PHP разработчик
docker-php-ext-install opcache решение проблемы. Оказывается по умолчанию его в официальном образе НЕТ! А я думал что он есть, так как глупо собрать php без него. Спасибо чатику DevOps в телеге, помогли.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
Странный вопрос. Вы установили посредника, а потом удивляетесь, почему с ним работает медленнее, чем без него. Очевидно, что часть ресурсов сервера тратится на сам docker.

Лучше переформулировать вопрос, почему на docker тратится так много ресурсов. Но для ответа на этот вопрос лучше нанять опытного админа, который будет ковыряться в вашем сайте, профилировать и искать проблему.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы