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

Время загрузки файла PHP, возможно, связано с NFS?

Эта проблема

Я пытаюсь диагностировать проблему с производительностью на разрабатываемом мной сайте Drupal. Утром, когда сайт не видит трафика (даже не запускается cron) более 8 часов, домашняя страница загружается примерно за 3,5 секунды. Перезагрузка страницы занимает 250 мсек.

Это веб-сервер разработки, на котором установлена ​​довольно старая версия PHP (5.3.3). Все файлы статически монтируются через NFS. (что, я считаю, является основной причиной, подробнее об этом ниже).

Чтобы помочь диагностировать, я установил XHProf на этом сервере разработки и включил модуль Drupal, который загружает страницу профилей и отображает данные профилирования в хорошо отсортированной таблице. Для тех, кто не знаком с XHProf, он предоставляет данные по каждой вызываемой функции, а также такие вещи, как общее затраченное время, использование памяти и вызовы этой функции.

Мои выводы

При начальном "медленном" ударе функция PHP file_exists взял 1400 мс из 82 вызовов, что составляет примерно 43% от общего времени выполнения. При последующей загрузке страницы та же функция file_exists снова был вызван 82 раза, но на этот раз он резко сократился до 3 мс составляет всего 1% от общего времени выполнения.

Я дополнительно просмотрел файл, который дольше всех загружал PHP в память (я считаю, что load:: префикс означает имя функции). Этот файл шаблона PHP занял колоссальное 42 мс загружать с первого раза, и только 3 мс при последующей перезагрузке!

Что я подозреваю

Мне ясно, что где-то происходит какое-то кеширование - просто я пока не знаю, где. Документы PHP для Файл существует упомяните, что вывод этой функции кэшируется. Затем я обнаружил, что могу контролировать размер этого кеша и, вероятно, его следует увеличить со значения по умолчанию 16k до чего-то более подходящего для Drupal (который загружает тонны относительных файлов).

Однако, хотя я думаю, что это уменьшит время, затрачиваемое на file_exists, Я не уверен, что это повлияет на время, необходимое PHP загрузка файл ( load:: Я упоминал ранее), и увеличение этого значения, похоже, просто скрывает основные проблемы с производительностью файловой системы.

Вопросы

  1. Если есть ветераны XHProf или PHP, которые могут подтвердить, realpath_cache какое-либо влияние на время, указанное в load:: из XHProf?
  2. Какие основные механизмы кэширования в Linux мне следует знать, которые могут повлиять на это?
  3. То же, что и выше, но для NFS?