Всем привет! Что есть:
- сервер: 2 x 2.8 ГГц, оперативка 4 гб, NVMe 50 ГБ (заполнено 13 гб), 200 мбит/с
- ubuntu, nginx, php-fpm, php 7.3, laravel, mysql
- на нём сервер API, который должен выдавать json строку Яндексу за 3 секунды (API Яндекс.Диалогов), если Яндекс не получает ответа, он закрывает соединение засчитывает ошибку.
- Запросов может быть много, особенно вечером
Проблема: от 0.5 % до 1 % запросов выполняются больше 3 секунд, из-за чего образуется ошибка, причём скачки резкие, рандомные, но постоянные. Все остальные запросы выполняются за 0.3 секунд.
Что делал:
- Увеличил оперативку до 6 гб и 3 ядер (вообще не помогло).
- Проставил все индексы в базе данных. (Вообще не помогло).
- Оптимизировал запросы в базу данных с 10-16 до 2-6 за 1 запрос к API (не помогло).
- Поменял Apache на NGINX и php-fpm (не помогло)
- Отключал все сайты кроме проблемного (не помогло)
- Логгирование медленных запросов в БД - пусто.
- Логгирование медленных скриптов в php-fpm - пусто.
- Пытался мониторить через innotop, atop и iotop (везде смешные цифры в десятые проценто, иногда только бд вылезает в топ, но там что то около 5% бывает). И не особо понятно, как мониторить, если я не знаю когда в следующий раз будет скачок.
Куда ещё копать и что делать? Уже неделю сижу и не знаю что ещё попробовать :( Помогите, пожалуйста. Вот скрины от Яндекса:
За сегодня (желтые бугорки) в зависимости от кол-ва нормальных запросов:
Скорость запросов за сегодня:
Процентное соотношение долгих запросов за весь месяц в процентах:
Ночью (желтые бугорки) в зависимости от кол-ва нормальных запросов (ночь, единичные запросы):
Причём на последней картинке долгие запросы появлялись, когда были единичные запросы, а когда начались постоянные (большая зелёная гора) - они исчезли.
UPD:
Сделал логирование nginx с временем запросов и обнаружил один такой медленный запрос, почему то у его размер всего 0 байт: