Php-fpm и Nginx в производительности docker conatainer

#php #mysql #laravel #docker #nginx

#php #mysql #laravel #докер #nginx

Вопрос:

мы работаем над системой онлайн-экзаменов, которая в то же время будет иметь высокий трафик, система разработана с использованием laravel и MySQL в качестве базы данных. наш сервер имеет 40 ядер и 64 ГБ оперативной памяти. Я установил Nginx в контейнер docker, PHP в другой контейнер, Mysql в другой контейнер, также мы протестировали систему классическим способом, когда все службы работают на одном сервере напрямую, без docker. но проблема в том, что система не может обрабатывать более 600 пользователей одновременно. мы пытались настроить производительность Nginx, но ничего не получилось, а также с php-fpm. Я не знаю, почему это происходит, мы пробовали со всей архитектурой, которая может помочь, но ничего не работает, каждый процесс PHP-fpm использует 27% процессора. и когда я использую

ApacheBench

чтобы отправлять запросы на сервер, а затем пытаться загрузить домашнюю страницу из моего браузера, требуется много времени, чтобы ответить на страницу и много раз возвращать тайм-аут. Я использую Nginx:stable-alpine в качестве образа докера Nginx.

 php:7.4-fpm-alpine
 

как изображение PHP.
Я не менял ни один из конфигураций по умолчанию для PHP или Nginx.
итак, какова наилучшая конфигурация для PHP и Nginx, которую я должен применить, чтобы иметь наилучшую производительность?

результат htop перед отправкой запросов введите описание изображения здесь

htop после отправки запроса с использованием

sudo ab -n 5000 -c 600 https://demo.qsinav.com/

введите описание изображения здесь

Комментарии:

1. Для каждого задействованного сервера запрашивается дополнительная информация. Какие-либо устройства SSD или NVME на хост-сервере MySQL? Опубликовать pastebin.com и делитесь ссылками. Из вашего корня для входа в систему SSH текстовые результаты: B) ПОКАЗЫВАЮТ ГЛОБАЛЬНЫЙ СТАТУС; после минимального времени безотказной работы 24 часов C) ПОКАЗЫВАЮТ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ; D) ПОКАЗЫВАЮТ ПОЛНЫЙ СПИСОК ПРОЦЕССОВ; E) СТАТУС; И дополнительная очень полезная информация, если она доступна, включает — htop ИЛИ top для большинства активных приложений, ulimit -a дляСписок ограничений Linux / Unix, iostat -xm 5 3 для операций ввода-вывода по устройствам и количеству ядер / процессоров, для анализа настройки рабочей нагрузки сервера для предоставления предложений.

2. @WilsonHauck спасибо за вашу помощь, я опубликовал в pastebin.com и включите всю информацию, которую вы просили, это ссылка pastebin.com/Jsr7YpX0

3. Какие-либо устройства SSD или NVME на этом сервере? Один сервер поддерживает все ваши действия? Не могли бы вы опубликовать текстовые результаты htop или top в командной строке ОС? Новый запрос, ТЕКСТОВЫЕ результаты MySQLTuner.pl (perl script) для получения дополнительной информации, в том числе по движку, количеству таблиц и размеру данных, а также гораздо более подробной информации. Какая у вас страна / часовой пояс? Мы находимся в центральном часовом поясе США UTC -6 часов.

4. можем ли мы пообщаться?

5. Ваша версия 8.0.0-dmr была выпущена 2016-09-12 в качестве этапа разработки. DMR обычно не используются ни для каких производственных систем. Рекомендация 8.0.21 с датой общей доступности 2020-07-13 была бы хорошим кандидатом, если бы другие люди 3 месяца находили и сообщали о любых трудностях с версией.

Ответ №1:

Скорость в секунду = RPS

Предложения для рассмотрения в вашем разделе my.cnf [mysqld]

 thread_cache_size=100  # from 9 to reduce threads_created RPhr of 78 
net_buffer_length=32K  # from 16K to reduce # packets per hour 
query_cache_size=0  # from 1M to conserve RAM because the QCtype of OFF
slow_query_log=ON  # from OFF to allow awareness and proactively correct
long_query_time=1  # from 10 seconds - if overwhelmed with entries, raise the seconds by 1 
innodb_write_io_threads=64  # from 4 to expedite writing to tables on storage devices
 

Есть еще много возможностей для улучшения конфигурации. Просмотр профиля, сетевого профиля для бесплатных загружаемых скриптов утилит для настройки производительности, в частности, findfragtables.sql помогает периодически напоминать вам об ОПТИМИЗАЦИИ часто используемых таблиц.