Как понять из-за чего PHP иногда начинает медленно работать?

Есть Laravel, и на нём есть API, которое выдаёт JSON строку в ответ на запросы, есть ограничение в 3 секунды, если запрос обрабатывается дольше 3-х секунд соединение закрывается тем, кто отправил запрос к моему API. Вроде всё работает хорошо, запрос обрабатывается в среднем до 0.5 секунды , но иногда (0.5 - 1 % запросов) время обработки запроса резко превышает 3 секунды:
5f9170af1b03f421965558.png
Никак не могу понять с чем связан такой большой и резкий скачок в времени обработки запроса,. Несколько раз ловил своими глазами этот баг, он происходит во время стандартных запросов. 10 таких запросов отлично отрабатываю, а 11 или 15 начинает тормозить. В логах апача и ларавела всё пусто. Сделал логирование запросов, но т.к. скрипт обрывается после 3-х секунд запись проблемных скриптов не происходит.
Что мне делать и куда двигаться?
  • Вопрос задан
  • 356 просмотров
Пригласить эксперта
Ответы на вопрос 5
dimonchik2013
@dimonchik2013
...а ну-ка пыль сдуй отсюда...
двигаться в APM Application performance management
https://habr.com/ru/company/pc-administrator/blog/...

но если ПХПшник па жизни - можешь as is оставить
Ответ написан
@vism
пользователей много?
Сессии в файлах хранятся?
Вангую я, что сессии у вам очищаются в это время.
Ответ написан
@Sergey_0287
У меня была такая проблема, оказалось дело в MySQL
Ответ написан
profesor08
@profesor08
Если по быстрому, то 4 секунды решат проблему.

Может у тебя в этот момент возрастает нагрузка в каком-то месте. Возможно даже не в сайте. Возможно эта задержка связана с IO операциями с диском, тогда проверь что в это время пытается записать или считать.
Ответ написан
@Clasen01
Junior front-end developer
Как можно еще поискать решение - добавить логгер, который будет писать вам в mattermost (или телеграм), например, с описанием что делает код (просто перед операциями отправлять сообщение в бот с timestamp'ом и информацией об операции)
что то типа
MattermostHelper::sendMessage('Делаю запрос к базе:  . $queryString, 'admin.nickname');
$db->getByString($queryString);
Ответ написан
Ваш ответ на вопрос

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

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