Данный пост уже не актуален, я все откладывал его до лучших времен. Время настало. Тут должен быть мем с котом и часами)
Ставим xhprof/xdebug
, strace
если хочется тёплого лампового свечения сисколов. Рандомно включаем на 2-3 страницах, видим в чем проблема.
Обычно варианта три:
-
Очень большие задержки от файловой системы. В 90% случаев не чистится файловый кеш. Чистим, проверяем настройки плагинов кеширования и на всякий случай ставим соответствующий крон
find … -delete
раз в час для файлов старшеCACHE_TIME*2
-
Очень большие задержки по сети (конкретный плагин который делает запросы по сети, а удалённый ресурс тормозит). Обычно таких плагинов 1-2, после их отключения и/или впиливания кеширования конкретно в них всё работает.
-
Конкретный плагин который кладёт БД. Смотрим запросы в mysql-e
show full processlist
, проставляем индексы ну или запиливаем кеш где логически возможно. -
Если ни одно из вышеперечисленных, убеждаемся что машине тупо не хватает процессора, добавляем немного ядер и спокойно изучаем проблему более детально.
Эти 4 пункта покрывают 99% случаев. Остальной 1% это самое интересное и выходит за рамки этой заметки.
Когда работал в хостинге решал такие проблемы десятки раз, на потоке диагностика занимала 5-10 минут. И что WP, что Битрикс, что Друпал, всё одно примерно и проблемы одинаковые.
Честно говоря, это всё общетехнические методы, которые мне постоянно помогали и не только в PHP-приложениях.
P.S. Смотрим на htop и понимаем чем конкретно занимается машина и чего ждёт вообще.