Лучшие настройки APC для сокращения времени выполнения страницы

16

У меня есть Drupal 7, apc с php-fpm и apache за лаком и 512 МБ ОЗУ.

Я измеряю время выполнения страницы с помощью модуля devel.

Время запроса к базе данных низкое (62 мс) по сравнению со временем выполнения страницы, которое составляет 854 мс. Это означает, что есть проблема с настройками PHP и APC.

Мои текущие настройки просто

apc.shm_size = 64
apc.stat=1 

Как я могу улучшить?

Каковы наилучшие настройки для Drupal с учетом вышеуказанной конфигурации?

Благодарность

Джон
источник

Ответы:

12

Мы работаем в push-среде SVN, поэтому очищаем кеш файла apc только скриптом.

Настройки APC:

apc.ttl=604800
apc.user_ttl=3600
apc.shm_size=192M
apc.include_once_override=1
auto_globals_jit=Off
apc.num_files_hint = 2048

apc.stat_ctime = 0
apc.file_update_protection = 2
apc.stat = 0

PHP скрипт:

<?php
$return = apc_clear_cache('opcode');
echo var_export($return);

604800 = 1 неделя.

После этого, если вы запустите xdebug / xhprof и запустите кеш-сайт, вы должны знать, что замедляет работу сайта. Короче говоря, анализ выхода из кеша - лучший способ ускорить работу Drupal. Ниже я перечисляю, какие патчи и модули мы используем для его ускорения; в вашем случае это будет иначе скорее всего.

Drupal 6 Конкретный ответ ниже

Как только вы преодолеете этот пункт и поймете, что APC не даст вам того, что вы ищете, переключитесь на pressflow и приведите в движение эти патчи:

Также попробуйте некоторые из этих модулей, поскольку они значительно увеличили скорость наших сайтов:

mikeytown2
источник
Большое спасибо за ваш ответ, но у меня есть Drupal 7.
Джон
Поэтому возьмите части APC и части xdebug / xhprof и посмотрите на исправления D6 как на пример того, что нужно искать в очереди на выдачу. Все вышеперечисленные патчи, в результате которых смотрят на кэш, растираются, находят болевую точку и находят соответствующую ей проблему. Быстрый старт: drupal.org/project/issues/search/...
mikeytown2
Теперь есть вики-страница по производительности drupal 7: groups.drupal.org/node/210683
mikeytown2
1
Просто к вашему сведению, мне пришлось прокомментировать строку apc.include_once_override = 1, потому что сломал сайт puregin.org/node/2550/3928
corbacho
php.net/apc.configuration#ini.apc.include-once-override Спасибо за указание на это. В зависимости от версии PHP и APC это может вызвать проблемы
mikeytown2
3

Это один из тех, "как долго это кусок строк вопросов".

То, что хорошо для сайта с большим объемом, может не совпадать с сайтом с низким объемом с большим количеством модулей, и может не совпадать с сайтом среднего объема с включенным только несколькими модулями. Другие сайты, работающие на сервере, также могут загружаться в память, доступную APC.

Моя отправная точка

apc.enabled=1
apc.shm_segments=1
apc.shm_size=64
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.rfc1867=1

Затем я настраиваю настройки для сервера, но опять же, нет единого размера, подходящего для всего набора настроек.

Найдите apc.php (вероятно, находится по адресу /usr/share/pear/apc.php) и установите его в DOCROOT для вашей установки Drupal. Заблокируйте его на свой IP-адрес через конфигурацию Apache. Измените имя пользователя / пароль внутри, а затем перейдите к нему. Затем вы увидите свою статистику APC.

Переконфигурируйте параметр shm_size, чтобы минимизировать потери в кеше. В идеале вы хотите выделить ему достаточно памяти, чтобы никогда не пропускать кэш для файла, плюс некоторую дополнительную память для кэша пользователя APC.

Оптимизируйте TTL, чтобы предотвратить смещение кэша. Если вы не редактируете файлы, вы можете увеличить это число.

enable_cli удобен, когда вы часто используете drush, так что drush использует кэшированные файлы из APC.

rfc1867 удобен для загрузки файлов.

Я также заметил php-fpm в названии. Это усложняет ситуацию и действительно выходит за рамки Drupal. Вы можете получить лучшие ответы при сбое сервера , так как многие параметры конфигурации системы не относятся непосредственно к Drupal.

mpdonadio
источник
Где хороший урок, который объясняет простым языком, что делает каждая настройка, например, ttl, сегменты и т. д.? Как Cli помогает с Drush?
Джон
Не могли бы вы объяснить, как "трафик, который я получаю, что еще работает на сервере, какие модули я установил и т. Д." влияет на настройки? спасибо
Джон
эти настройки выше не очень помогли. Должен ли я попробовать xhprof, чтобы увидеть, что происходит с php?
Джон
Все настройки APC описаны по адресу php.net/manual/en/apc.configuration.php
mpdonadio
1
@MPD> enable_cli удобен, когда вы часто используете drush, так что drush использует> кэшированные файлы из APC. На самом деле, cli - это отдельный процесс, который не разделяет свой apc-кеш с apache или даже между вызовами drush.
Робин Миллетт
2

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

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

Недавно я написал два сообщения в блоге об использовании xhprof в Drupal и типичных узких местах , которые могут вас заинтересовать.

Berdir
источник
groups.drupal.org/node/82889 Профилирование PHP с XHprof
Джон