Мой рабочий сервер - это 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 gci -Wait
показывает, что запрос не зарегистрирован в доступе . 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
.
Но поскольку мой офис любит позволять бюрократии мешать всему ... может быть немного до того, как это произойдет.