APC -> APCu / OPCache, производительность низкая

У меня есть m3.xlarge Экземпляр EC2, который я обновил до PHP 5.5.11 сегодня.

С этим обновлением он перезаписал php55-pecl-apc с php55-pecl-apcu,

После прочтения и экспериментов я понимаю, что APC был заменен на OPCacheза исключением хранилища значений ключей, которое можно вернуть с APCu,

После настройки моего конфига на что-то, что выглядит разумно, использование Wordpress при входе в систему теперь ужасно медленно, по крайней мере, на 300-900 мс хуже (внешний интерфейс кешируется с помощью лака и работает отлично... но когда вы используете админ, это намеренно не кешируется и медленно как грех).

Я выполнил серию тестов по мере обновления для небольшого размера выборки для каждого шага. Это ухудшалось все хуже и хуже, как я продолжал.

  • APC (до обновления) -->
  • OPCache + нет APCu -->
  • OPCache + APCu + WP Плагин для APCu

Сейчас я просто тусуюсь с OPCache, а не с APCu.

  1. Как я могу достичь той же производительности? Мне понравился интерфейс администратора, мне понравилось, как быстро это было. Я, честно говоря, не понимаю, как это вообще улучшение, это очень удручает... если только не существует какой-то супер-библиотеки, о которой я не знаю. Это, конечно, не то, что у меня есть, или, может быть, он не настроен хорошо.
  2. Если предположить, что ответом на вопрос № 1 является "вы настроили его как шары", то не могли бы вы взглянуть на это и посмотреть, является ли это разумным?

Для моей установки я использую последнюю версию WordPress, несколько больших плагинов, но я не могу их снять, потому что они важны. К счастью, лак берет на себя большую часть работы. У меня 4 ядра, 16 ГБ памяти, ~10 тыс. Файлов в корне моего сайта. У меня также нет настоящих хардкорных приложений или чего-то другого, кроме WordPress, это довольно ванильная установка. Я думаю, что это все, что может помочь.

Config:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.revalidate_path=0
opcache.save_comments=0
opcache.load_comments=0
opcache.fast_shutdown=1
opcache.enable_file_override=0
opcache.optimization_level=0xffffffff
opcache.inherited_hack=1
opcache.dups_fix=0
opcache.blacklist_filename=/etc/php-5.5.d/opcache*.blacklist
opcache.max_file_size=2M
opcache.consistency_checks=1
opcache.force_restart_timeout=180
opcache.error_log=/var/log/php-fpm/5.5/opcache.log
opcache.log_verbosity_level=1
opcache.preferred_memory_model=
opcache.protect_memory=0

3 ответа

Решение

Прямо сейчас вы проверяете каждый файл на каждый запрос на изменения, что, вероятно, не то, что вы хотите в производственной системе.

Я обычно просто отключаю его (не забудьте перезапустить веб-сервер после внесения изменений):

opcache.validate_timestamps=0

Кроме того, вы можете попробовать установить частоту, отличную от 0, и оставить ее включенной:

opcache.validate_timestamps=1  
opcache.revalidate_freq=300

Теоретически это должно проверять изменения каждые 5 минут.

У вас также есть

opcache.consistency_checks=1

Что в соответствии с документами говорит, замедлит производительность. Выключи это.

opcache.consistency_checks integer

Если не ноль, OPcache будет проверять контрольную сумму кэша каждые N запросов, где N - значение этой директивы конфигурации. Это следует включать только при отладке, так как это ухудшит производительность.

Из RFC, который отвечал за интеграцию OPCache в PHP:

APC может восстановить память старых недействительных скриптов. APC использует диспетчер памяти и может восстановить память, связанную со сценарием, который больше не используется; Optimizer+ работает по-другому и помечает такую ​​память как "грязную", но фактически никогда не восстанавливает ее. Как только уровень грязного процента поднимается выше настраиваемого порога - Optimizer+ перезапускается сам. Обратите внимание, что это поведение имеет как преимущества, так и недостатки стабильности.

Я предполагаю, что вы достигли порога, который запускает перезапуск кэша кода операции.

Ссылка: https://wiki.php.net/rfc/optimizerplus

Другие вопросы по тегам