Рейтинг:4

PHP-скрипты внезапно загружаются очень медленно на Apache

флаг jp

Я проверяю, почему иногда мои PHP-скрипты долго загружаются по сети (> 30 секунд) на моем сервере Apache 2.4 Ubuntu с PHP-FPM 7.4 с использованием mpm_event. Последние несколько месяцев сервер работал нормально, это начало происходить несколько дней назад, и я ничего не менял. Делал перезагрузку, не помогло.

я сделал простой test.php. Иногда загружается нормально (<100 мс), но иногда загрузка занимает 1 минуту:

<?php echo "test\n"; ?>

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

  • Процессор сервера, оперативная память и ввод-вывод в норме (проверено с помощью хтоп).
  • Статические файлы HTML загружаются без каких-либо задержек.
  • Локальный запуск скрипта через консоль SSH выполняется очень быстро.
  • Журналы ошибок Apache не показывают ничего необычного.
  • Я проверил, есть ли какая-то DDOS-атака, проверив количество подключенных IP-адресов из той же подсети /16 и не нашел ничего странного (например,> 100 подключений).

Как я могу отладить это, чтобы понять, почему это происходит?


Некоторый отладочный вывод, который может помочь:

Статус службы sudo php7.4-fpm

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

Рейтинг:5
флаг fr

Причин такого поведения может быть несколько:

  1. Если этот веб-сервер обрабатывает запросы из внешней сети, то с увеличением объема трафика может возрастать нагрузка, что приводит к увеличению времени отклика сервера.
  2. Если ваши скрипты используют обращения к внешним ресурсам, то в этом случае время отклика вашего сервера может увеличиться из-за низкой скорости отклика внешнего ресурса.

Сообщение журнала:

[30-Sep-2021 03:36:46] ПРЕДУПРЕЖДЕНИЕ: сервер [pool www] достиг настройки pm.max_children (5), рассмотрите возможность ее повышения

это просто доказательство повышенной нагрузки.

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

Рейтинг:4
флаг jp

Я думаю, что нашел решение, но все же, если у вас есть какие-либо предложения, сообщите мне или опубликуйте другой ответ.

Я проверил /var/журнал/php7.4-fpm.log и видел много таких записей:

[30-Sep-2021 03:36:46] ВНИМАНИЕ: достигнут сервер [pool www] Параметр pm.max_children (5), рассмотрите возможность его повышения

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

Так что я поднятый в макс_дети до 15 и вроде помогает.

Рейтинг:1
флаг es

Как вы можете видеть в своем выводе статуса введите описание изображения здесь у вас есть задача, ожидающая запуска (5 активных, 0 бездействующих, 6 задач). Как вы написали в своем собственном ответе (и я рад, что это сработало), увеличение количества разрешенных детей может быть хорошим решением, но многое уходит на оптимизацию php-fpm, и, безусловно, следует больше думать о вся система прежде чем вносить эти изменения в конфигурацию.

Твердое руководство здесь.

Но независимо от того, что вы должны знать при использовании статических значений:
если (использование памяти процесса * max_children > RAM)
{ [сбой апача] }

если (требования к обработке * start_servers > CPU)
{ [сбой апача] }

И всегда знать свое оборудование перед настройкой этих настроек, особенно в динамическом / по требованию (imo, легче ошибиться).

Если вы делаете это для любого критически важного бизнес-веб-сервера, я бы хотел округлить, а затем удвоить все оценки. то есть самый большой процесс, который можно вызвать, использует 178 МБ, поэтому 200 МБ, а ваша текущая виртуальная машина на [вставьте хостинг-провайдера / себя] имеет только 1 ГБ ОЗУ - я бы установил для max_children значение 2 -- тогда, когда вы обновите свою виртуальную машину (что вы делаете с 1 ГБ в 2021 году ??) и у вас будет 8 ГБ ОЗУ на вашем сервере, вы можете использовать max_children = 18 Обратите внимание, что в обоих примерах округление выполняется в пользу дополнительных ресурсов, и после удвоения для целей fpm остается часть памяти для использования ОС и другими фоновыми процессами.

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

флаг sa
Тот факт, что это занимает целую минуту, заставляет меня думать, что другие задачи довольно медленные.
Рейтинг:0
флаг in

У нас была почти такая же проблема в прошлом году.

Повышение максимального количества детей только отодвинет проблему на более позднюю дату.

Оказалось, что это медленная база данных MySQL, размещенная на выделенном сервере в нашей сети для блога.

Наш PHP был настроен на попытку подключения в течение 30 секунд, и всякий раз, когда эта база данных решала действовать, она пережевывала 100 дочерних элементов PHP.

Мы снизили его до 1 секунды, и проблема ушла. Я не помню, была ли проблема с базой данных связана с сетью или нам пришлось оптимизировать саму базу данных.

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

Ответить или комментировать

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