Этот сервер Apache / MySQL (Debian 8), на котором запущен сайт Drupal, демонстрирует странное поведение:
Всегда есть один процесс Apache, работающий со 100% загрузкой ЦП (согласно htop). Каждые четыре минуты (~ 240 секунд), процесс завершается, и сразу же другой процесс Apache перескакивает на вершину со 100% загрузкой ЦП - еще на четыре минуты.
При просмотре журнала ошибок Apache завершенный процесс отображается с фатальной ошибкой PHP «Превышено максимальное время выполнения 240 секунд»:
[: error] [pid 31280] [client 185.17.206.72:55628] Неустранимая ошибка PHP: превышено максимальное время выполнения 240 секунд в /var/www/drupal/modules/field/field.attach.inc в строке 328
Эта модель сохраняется и в деловые времена. Ночью, когда на сайте меньше посетителей, сообщение об ошибке появляется реже.
Система имеет пять ядер (виртуальную машину) и работает под управлением Apache 2.4, PHP 5.6, Percona 5.6 и Drupal 7. Я запускал MySQL с медленным журналом запросов, но нет медленных запросов, которые соответствовали бы этим частым тайм-аутам PHP.
Я запустил strace на нескольких процессах Apache, работающих со 100% загрузкой ЦП, но не обнаружил ничего очень выдающегося: процесс останавливается при опросе каждые несколько секунд на пару секунд. Но это кажется нормальным поведением.
Нет недостатка в соединениях с БД (согласно, например, mysqltuner и tuningprimer).
Глядя на запросы, которые соответствуют этим тайм-аутам (я использовал формат журнала с PID и временем, затраченным на выполнение запросов: LogFormat "%h %l %u %t %>s %D %P \"%r\" %b" exectime
), Я не вижу закономерности: это происходит для разных запросов, и это запросы, которые обычно заканчиваются за 1 секунду и меньше.
Мне просто интересно, что происходит с этими последовательными ошибками PHP и как я могу их взять. Есть идеи, как это дальше анализировать?