Что все способствует времени выполнения страницы drupal?


17

У меня есть сайт, который я исследую, у которого есть серьезные проблемы с производительностью, используя memcache, я смог сократить количество запросов как по количеству, так и по общему времени выполнения (с 3 секунд до 230 мс), но время выполнения страницы ускользает от меня (я глядя на значения, выводимые devel), я понимаю, что время выполнения страницы = время, необходимое php для выполнения, поэтому я установил APC и вижу, что код операции php кэшируется, а статистика показывает попадания на панели управления APC (apc.php поставляется с APC), но время выполнения моей страницы не уменьшается Поэтому я думаю, что мой вопрос состоит из двух частей:

  • Что все способствует (лучше замедляет) времени выполнения страницы? Это просто время, необходимое для выполнения PHP?
  • Какие подходы я должен использовать, чтобы сократить время выполнения страницы. Я пробовал APC но не сильно помог

PS Количество модулей, используемых на этом сайте, просто огромно (168), но сейчас я не могу дать такую ​​рекомендацию, это больше похоже на пожар в дырочной ситуации.

Изменить: Вывод запуска xhprof на локальном экземпляре (рекомендуется mikeytown), это кажется сумасшедшим, я думаю, что более поздние результаты из-за побоя? Дифференциалы для одного и того же URL имеют радикальную разницу и слишком много ресурсов. Также не уверен, почему он показывает значения, которые не с сегодняшнего дня: | (Я только что установил xhprof на этот ноутбук)

Вывод запущенного xhprof на локальный экземпляр

Ответы:


4

Получите кешгринд вашего сайта. Xdebug или xhprof может генерировать один. Это скажет вам, какие функции выполняются дольше всего. Пока вы не сделаете это, это плохая игра в догадки.


Привет, спасибо за предложение, я только что запустил xhprof на своей локальной версии для разработки (ноутбук не на сервере), и я вижу это - picasaweb.google.com/lh/photo/… Это по-настоящему? Я имею в виду, возможно ли для страницы потреблять 750 МБ памяти?
Дипен

Может ли это быть из-за обмолота? более поздние профилированные данные для того же URL-адреса, если вы посмотрите на нижний тот же URL-адрес, потребляют гораздо меньше ресурсов, но прогон различий показывает совершенно разный и экстремальный расход ресурсов.
Дипен

1
Это действительно зависит, но для 99,9% установок, если вы используете более 100 МБ оперативной памяти, что-то не так.
mikeytown2

Кроме количества модулей, может быть что-то еще не так? Я не уверен, можно ли сразу снять модули с производства. Кстати, на локальном компьютере я использую nginx + php-fpm, а на производстве сайт использует lighspeed с быстрым cgi.
Дипен

1
Вы должны углубиться в cachegrind и перечислить, какие функции поглощают все ваше время. img715.imageshack.us/i/cgrindout.png
mikeytown2

1

РЕДАКТИРОВАТЬ: я неправильно прочитал оригинальный пост. 168 модулей - это много, а от 300 до 700 мс SQL-запросов огромны . Чем больше модулей вы будете использовать, тем больше будет запросов, как только модули выполнят некоторые из них.

Пока вы можете использовать агрессивное кеширование, кешируйте все, если этого недостаточно, попробуйте обратный прокси-кеш. Использование CDN для файлов может значительно улучшить ситуацию. Кэш обратного прокси-сервера также может помочь вам, удалив некоторые файлы cookie авторизации при попадании на страницы, которые ему не нужны (тогда ядро ​​будет думать, что пользователь является анонимным для них, и максимально увеличивает кэширование).


Динамизм ядра Drupal замедляет весь рассвет, как только у вас одновременно работает слишком много модулей.

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

Рендеринг также может занимать много времени, drupal_render () (иногда называется API рендеринга) - хороший кусок API (действительно полезный), но также немного медленный. Переключение на PDO (D7) и полный DBTNG (что, кстати, здорово) также добавляет неустранимую задержку.

Тем не менее, само по себе ядро ​​довольно быстрое (но оно выполняет слишком много SQL-запросов, даже если почти ничего не установлено), плохо кодированные модули часто являются узким местом.

APC может делить время выполнения на 2 или 3, в зависимости от кода, который выполняется. если вы настроите его правильно (включите все оптимизации APC, официальное руководство APC хорошо написано и поможет вам).

Если у вас установлена ​​система с медленной файловой системой (сетевая файловая система или медленный жесткий диск), это может оказать заметное влияние на время выполнения. Drupal сделан из множества маленьких файлов, что заставляет PHP выполнять ввод / вывод на ФС каждый раз, когда он загружает один из них (APC также очень помогает в этом).

Неправильно настроенная СУБД также может быть довольно неприятным узким местом, если вы используете MySQL, подумайте о тонкой настройке. Если вы пользуетесь виртуальным хостингом, если он не предназначен для Drupal (или готов), СУБД и стек PHP, вероятно, будут неправильно настроены или не настроены, что может привести к очень медленным сайтам.

Не забудьте активировать все кэши. Если ваш сайт не аутентифицирован для пользователя, активируйте агрессивное кэширование страниц (это действительно удивительно).

Чем больше у вас будет блоков, тем медленнее будут заполняться страницы, блоки модулей Views станут узким местом для рассвета (в зависимости от используемых вами плагинов Views блок OG может быть очень болезненным), если вы не ограничите их видимость для каждой страницы или с помощью специального PHP-кода (любой другой блок, всегда устанавливая видимость вашего блока вручную, очень помогает фреймворку, избегая попытки рендеринга пустых блоков).

Избегайте модулей, которые используют hook_init (), hook_init () запускается на каждой странице, даже если вы получаете 403 или 404, который замедляет все (это даже замедляет время генерации imagecache | style, и ошибки 404 для файлов будут рассвет медленный, просто чтобы сказать вам, что файл не существует).


Привет, здесь, когда я говорю время выполнения страницы, я имею в виду значение, которое отображается модулем devel внизу страницы и не использует его в общем смысле цикла запросов / ответов drupal, который также включает в себя запросы SQL и т. Д. Мой вопрос в контексте аутентифицированного пользователя. Так, когда devel сообщает время выполнения страницы, это также включает запросы sql?
Дипен

Я не уверен, что файловая система будет узким местом, так как я нахожусь на файловой системе Linux с 15k RPM. SQL-запросы занимают примерно 300-700 мс в зависимости от страницы, но время выполнения страницы ~ = 3 с (сообщается devel). Не уверен, что еще может быть проблема.
Дипен

Извините, я неправильно прочитал ваш оригинальный пост. Значение devel вычисляется от загрузки до выключения (модуль devel имеет свой собственный обработчик выключения PHP для выполнения многих задач, включая это). Я не уверен точно, когда он запускается и останавливается, но почти все время создания страницы Drupal и особенности бизнеса включены во время выполнения этой страницы. Да, он включает в себя все (включая время и задержку SQL-запроса) и собственную задержку (ведение журнала запросов уровня также влияет на производительность).
Пьер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.