Назад | Перейти на главную страницу

WAMP Stack / Silverstripe, высокий TTFB, но быстрое выполнение PHP? Где искать ответы?

Мой рабочий сервер - Windows Server 2012 R2, Apache 2.4, PHP 5.6 и MariaDB (не уверен в версии, возможно, не имеет значения). У меня есть настроенный сайт, работающий на Silverstripe 3.5.

В последнее время я получаю нелепые TTFB с определенными действиями, в первую очередь с входом в систему (более 30 секунд) или иногда случайным образом при просмотре серверной части. Любопытно, что этого не происходит на нашем сервере разработки, который настроен аналогичным образом, и наш ИТ-отдел собирается переполнить httpd.conf и php.ini чтобы увидеть, есть ли какие-либо различия, которые могут быть проблемой.

Я включил расширение Zend OpCache в надежде, что оно поможет, но я не вижу каких-либо значительных улучшений.

Я установил XDebug и запустил профилирование при входе в систему (добавив скрытое поле формы с именем XDEBUG_PROFILE через инспектор DOM), но в выводе при просмотре в WinCachegrind говорится, что выполнение PHP в совокупности заняло не более 5 секунд, т. Е. Общее совокупное время в main.php было 4.x секунды. Кажется, нет заметных узких мест в логике фреймворка или доступе к базе данных.

httpd.exe занимает 14% моего ЦП на время выполнения запроса. Просмотр журналов с помощью Powershell's gci -Wait показывает, что запрос не авторизован access.log до тех пор, пока не будет отправлен ответ (не уверен, что нормальное поведение) и не появятся ошибки.

Я не понимаю, почему Apache так долго обрабатывает запрос, который, как утверждает PHP, занимает всего 4 секунды для выполнения логики. Хотя потенциальные решения могут быть оценены по достоинству, я действительно хотел бы знать, где еще я могу посмотреть с точки зрения диагностики, чтобы выяснить, что вызывает такое замедление Apache, например доступ к файлам, отслеживание выполнения и т. д.? Я понятия не имею, с чего начать поиск.

База данных была не узкое место. Как ни странно, это был тайник - это известная проблема, которая Zend_Cache_Backend_Fileкеширование на основе отвратительно медленных, если на сайте есть много данных, шаблонов и изображений для кеширования. Конечно же, в моей папке silverstripe-cache на сервере было более 5000 файлов.

Добавление следующей строки в ./mysite/_config.php отключение кеширования привело к немедленным, ошеломляющим улучшениям (35-секундный TTFB при входе в систему до менее 0,5 секунды!):

SS_Cache::set_cache_lifetime('default', -1, 100);

тем не мение, это временное решение. Мы рассмотрим возможность реализации более постоянного, более практичного решения для обработки кеширования, такого как использование RAM-диска в сочетании с серверной частью файловой системы или использование серверной части, которая использует пулы памяти, такие как XCache или Memcached, а также работать над переходом на Silverstripe 4.x, который сбрасывает Zend_Cache в пользу symfony/cache.

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