Сервер часто отключается на 3 минуты.

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

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

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 на 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

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

Проблема, описанная в вашем запросе, весьма распространена в ИТ-сфере, особенно когда речь идет о веб-серверах, таких как Apache, работающих в условиях высокой нагрузки. Ниже приведено подробное и профессиональное объяснение возможных причин и решений вашей проблемы.

Теория

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

  1. Ошибка Себорда полной таблицы (scoreboard is full): Эта ошибка указывает на то, что текущие настройки сервера Apache не позволяют выделять дополнительное количество воркеров для обслуживания запросов, когда существующие воркеры заняты. Проблема может быть вызвана недостаточным количеством MaxRequestWorkers.

  2. Достижена MaxRequestWorkers: Это как раз та ситуация, когда Apache уже не может обрабатывать больше запросов, чем разрешено настройками, и все новые запросы отклоняются.

Пример

Если у вас входной трафик значительно возрастает, например из-за рекламных кампаний или других внешних факторов, это может вызвать резкое увеличение числа одновременных пользователей, что в свою очередь приводит к превышению допустимого количества одновременных соединений вашего Apache сервера.

Применение

На основе предоставленной информации и увеличенной мощности (с 32 до 64 ядер), есть несколько шагов, которые вы можете предпринять для решения проблемы:

  1. Оптимизация настройки Apache:

    • Увеличьте MaxRequestWorkers: Хотя вы уже увеличили это значение до 1024, возможно, стоит и дальше искать баланс, анализируя потребление CPU и памяти, чтобы подобрать оптимальные настройки в соответствии с новым количеством ядер.
    • Пересмотрите ThreadsPerChild и ThreadLimit: Увеличение этих значений может позволить Apache обрабатывать больше запросов параллельно.
  2. Проверка других ограничений:

    • Убедитесь, что конфигурации ОС не устанавливают ограничение на количество файловых дескрипторов или на другие системные ресурсы, которые могут затруднять работу Apache.
    • Настройте параметры ядра и сетевых соединений (например, net.core.somaxconn) для улучшения обработки большого количества соединений.
  3. Мониторинг производительности:

    • Используйте инструменты мониторинга, такие как New Relic или Datadog, чтобы получить более глубокое понимание узких мест производительности вашего сервера.
    • Собирайте метрики производительности, включая использование CPU, памяти, входные/выходные операции диска и сетевую загрузку.
  4. Кэширование и балансировка нагрузки:

    • Настройте кэширование на уровне приложения (например, Varnish для Magento) или на уровне сервера (используя модуль Apache mod_cache).
    • Рассмотрите возможность использования балансировки нагрузки для распределения входящего трафика между несколькими серверами, что может значительно уменьшить нагрузку на единичный сервер.
  5. Общее улучшение приложения:

    • Оптимизируйте код и базу данных приложения для повышения производительности. Например, задержка в PostgreSQL или MySQL может служить причиной торможения веб-страниц.
    • Рассмотрите возможность использования CDN для распределения статического контента, что также снизит нагрузку на ваш сервер Apache.

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

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

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