Сервер часто отключался на 3 минуты (записан: AH00288: таблица результатов заполнена, MaxRequestWorkers не достигнуто).

Вопрос или проблема

Конфигурация системы

Distributor ID: Ubuntu
Description:    Ubuntu 22.04.5 LTS
Release:    22.04
Codename:   jammy

ИЛИ

Icon name: computer-vm
Chassis:   vm
...
Virtualization:   microsoft
Operating System: Ubuntu 22.04.5 LTS              
Kernel:           Linux 5.15.0-1066-azure
Architecture:     x86-64

И

Server version: Apache/2.4.62 (Ubuntu)
Server built:   2024-07-22T12:36:51

Я запускаю сайт Magento 2 на сервере Apache 2.4 с PHP 8.1, и сайт часто выходит из строя примерно на 3 минуты. Проблема была обнаружена с помощью StatusCake с следующими деталями:

HTTP Code: 0
Reason: Timeout / Connection Refused

Во время расследования я обнаружил, что простои коррелируют с высоким трафиком, когда загрузка процессора превышает 90%. Несмотря на обновление процессора с 32 до 64 ядер, проблема сохраняется.

В журнале ошибок Apache я заметил следующие ошибки:

[Wed Jan 08 15:16:28.425970 2025] [mpm_worker:error] [pid 1849:tid 1849] AH00288: scoreboard is full, not at MaxRequestWorkers
[Wed Jan 08 15:16:29.475406 2025] [mpm_worker:error] [pid 1849:tid 1849] AH00286: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
[Wed Jan 08 15:16:30.478815 2025] [mpm_worker:error] [pid 1849:tid 1849] AH00287: server is within MinSpareThreads of MaxRequestWorkers, consider raising the MaxRequestWorkers setting

Чтобы решить эту проблему, я изменил конфигурацию Apache следующим образом:

MaxConnectionsPerChild 0 to 1000

<IfModule mpm_worker_module>
    StartServers             2
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadLimit              64
    ThreadsPerChild          64
    MaxRequestWorkers        1024
    MaxConnectionsPerChild   1000
</IfModule>

Несмотря на эти изменения, проблема сохраняется. Пожалуйста, поделитесь своими соображениями или предложениями о проблеме и конфигурации

Следует последний журнал на момент простоя сайта:

[Sun Jan 19 12:18:48.135420 2025] [mpm_worker:error] [pid 184878:tid 184878] AH00288: scoreboard is full, not at MaxRequestWorkers
[Sun Jan 19 12:18:50.136823 2025] [mpm_worker:error] [pid 184878:tid 184878] AH00288: scoreboard is full, not at MaxRequestWorkers
[Sun Jan 19 12:18:51.137918 2025] [mpm_worker:error] [pid 184878:tid 184878] AH00288: scoreboard is full, not at MaxRequestWorkers
[Sun Jan 19 12:18:54.141136 2025] [mpm_worker:error] [pid 184878:tid 184878] AH00288: scoreboard is full, not at MaxRequestWorkers
[Sun Jan 19 12:18:55.142314 2025] [mpm_worker:error] [pid 184878:tid 184878] AH00288: scoreboard is full, not at MaxRequestWorkers
[Sun Jan 19 12:18:56.143406 2025] [mpm_worker:error] [pid 184878:tid 184878] AH00288: scoreboard is full, not at MaxRequestWorkers
[Sun Jan 19 12:18:58.144826 2025] [mpm_worker:error] [pid 184878:tid 184878] AH00288: scoreboard is full, not at MaxRequestWorkers
[Sun Jan 19 12:18:59.145931 2025] [mpm_worker:error] [pid 184878:tid 184878] AH00288: scoreboard is full, not at MaxRequestWorkers
[Mon Jan 20 00:00:00.440197 2025] [mpm_worker:notice] [pid 184878:tid 184878] AH00297: SIGUSR1 received.  Doing graceful restart

Ответ или решение

Ваша проблема с сервером заключается в частых падениях сайта на 3 минуты, когда сервер работает на высокой загрузке CPU, достигая уровня более 90%. В Apache-логах были обнаружены ошибки, связанные с полным "scoreboard" и нехваткой ресурсов для обрабатывания новых подключений. Давайте разберем эту проблему более подробно.

Теория:

Apache HTTP Server управляет своим пулом рабочих процессов с помощью механизма, называемого MPM (Multi-Processing Module). В вашем случае используется MPM Worker, который запускает потоковые процессы для обработки запросов. Когда scoreboard заполняется, это говорит о том, что сервер израсходовал все доступные слоты для подключения и обработки запросов. Это часто приводит к отказам в обслуживании, временной недоступности веб-сайта и, как следствие, сообщениям о таймаутах или отказанных соединениях.

Каждый раз, когда поступает новый запрос, Apache определяет свободный поток для его обработки. Если все потоки заняты и не хватает резервных потоков, сервер достигает своего лимита MaxRequestWorkers, а повторяющиеся просьбы об обслуживании приводят к "scoreboard is full" ошибкам.

Пример:

Предположим, что у вас есть 1024 "слота" для обработки запросов. В моменты высокого трафика, как вы упоминаете, эти слоты могут быть полностью заполнены, прежде чем запрос успевает завершиться. Это особенно заметно, если обрабатываемые запросы являются ресурсозатратными или требуют значительного времени для обработки (например, сложные запросы к базе данных при работе с Magento 2).

Применение:

Для решения этой проблемы, необходимо четко оценить конфигурацию и оптимизировать серверные настройки:

  1. Увеличение MaxRequestWorkers:

    • Значение MaxRequestWorkers управляет максимальным количеством клиентских запросов, которые Apache может обрабатывать одновременно. Вы должны попробовать увеличить это значение, чтобы позволить серверу обрабатывать больше соединений параллельно.
  2. Оптимизация утилизации CPU:

    • Проверьте скрипты и плагины Magento на предмет оптимизации, так как они могут быть причиной излишней загрузки CPU.
    • Используйте кеширование для уменьшения нагрузки на сервер. Включение OPcache для PHP и использование внешних кеширующих систем, таких как Redis или Varnish, может значительно улучшить производительность.
  3. Настройка других параметров MPM Worker:

    • Увеличьте MinSpareThreads и MaxSpareThreads, чтобы обеспечить больше потоков в ожидании для обслуживания увеличенного трафика.
    • Расширьте ThreadLimit и ThreadsPerChild при условии, что ресурсы сервера позволяют это сделать без увеличения нагрузки.
  4. Мониторинг производительности:

    • Воспользуйтесь инструментами мониторинга системных ресурсов, наполненности CPU, памяти и I/O. Это поможет определить узкие места и в реальном времени видеть эффекты от внесенных изменений.
  5. Вертикальное и горизонтальное масштабирование:

    • Если текущие настройки не справляются с пиковой нагрузкой, рассмотрите возможность горизонтального масштабирования—добавьте дополнительные серверы для балансировки нагрузки.
    • Проверьте также настройки SSL/TLS, так как неправильная конфигурация может дополнительно нагружать сервер.

Внедрение изменений требует тщательного тестирования, чтобы избежать ухудшения производительности и убедиться, что модификации дают ожидаемый положительный результат. Также, если проблема сохраняется после выполнения всех предложенных шагов, возможно стоит обратиться к экспертам для комплексного анализа и оптимизации архитектуры вашего веб-приложения Magento.

Оцените материал
Добавить комментарий

Капча загружается...