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

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.php4.x секунды. Кажется, нет заметного узкого места в логике фреймворка или доступе к базе данных.

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

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

решение1

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

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

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

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

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

Связанный контент