Настройки производительности Zend OPcache против настроек по умолчанию
Насколько я понимаю эти настройки:
opcache.validate_timestamps=0
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=3907
opcache.blacklist_filename=/blacklisted_files
следует повысить производительность (по ссылкам: 1, 2 и 3). На самом деле я не уверен насчет последних 2, и в моем случае значение настройки "4" для internet_strings_buffer может никогда не быть заполнено (поэтому не дает лучших результатов), но "validate_timestamps" должно удалить служебные данные stat() и, следовательно, дать мне лучше производительность, но согласно моим тестам с JMeter, я не могу это проверить. Каждая настройка отдельно хуже настроек по умолчанию.
Я понимаю, что "настройки производительности" могут не сильно улучшиться, но я думаю, что это не должно работать хуже (разница составляет около +2 мс для каждого запроса).
Вопрос: почему настройки по умолчанию лучше, чем производительность / рекомендуемые настройки?
Кроме того, OPcache лучше обрабатывает перезапись / удаление / поиск в памяти меньшего размера, чем в большем (говоря об установке "opcache.memory_consumpence")?
1 ответ
Варианты 2 и 3 только косвенно снижают производительность в том смысле, что они связаны с емкостью кэша кода операции. Если ваше текущее использование соответствует значениям по умолчанию, то вы не увидите никакой существенной разницы, кроме небольшого увеличения системных издержек при использовании Opcache. Конечно, вы получите выгоду, если текущее использование не подходит, потому что кэш будет иметь большую емкость, и вы будете получать меньше ошибок.
Вариант 4 относится к определению шаблонов для имен файлов сценариев PHP, которые являются изменчивыми и поэтому не должны кэшироваться. Это особенно важно, если вы отключили проверку меток времени, так как Opcache не сможет зафиксировать такие изменения.
Вариант 1 удаляет дополнительные вызовы stat(), которые strace
из процесса PHP можно проверить. В современных процессорах ядро Linux кеширует inode довольно эффективно, так что это экономит sub mSec, только если узел находится в кеше VFAT. Вам нужно было бы построить тест синхронизации очень хорошо, чтобы измерить эту разницу.
У Opcache очень плохая стратегия повторного использования: она не беспокоит. Кэш медленно заполняется, а когда он заполнен, он полностью очищается и восстанавливается с нуля.