Мой PHP OPcache использует 100% памяти
General info
Zend OPcache 7.0.4-dev
PHP 5.5.23-1+deb.sury.org~trusty+2
Server Software nginx/1.6.2
Вот мои настройки кэша:
zend_extension=opcache.so
opcache.memory_consumption=1024
opcache.max_accelerated_files=50000
opcache.revalidate_freq=180
opcache.consistency_checks=0
И еще немного информации о попаданиях в кеш:
total memory: 1024.000MB
used memory: 1010.398MB
free memory: 35.086KB
wasted memory: 13.568MB (1.32%)
number of cached files: 10,724
number of hits: 9,576,431
number of misses: 21,450
blacklist misses: 0
number of cached keys: 12,971
max cached keys: 65,407
Стоит ли мне беспокоиться о 100% использовании памяти? Может ли кто-нибудь объяснить использование памяти OPcache в терминах непрофессионала?
Сервер имеет 8 ГБ оперативной памяти (Linode)
Предел памяти opcache (в настоящее время установленный на 1024 МБ / 1 ГБ) должен быть достаточно большим, чтобы покрыть размер всех файлов PHP, кэшируемых Opcache. 1 ГБ для набора файлов PHP - это большой объем, поэтому, возможно, это не проблема, но вам следует хотя бы начать с него. Кнопка «Использование файла» на прилагаемом снимке экрана, вероятно, предоставит вам отчет об использовании памяти для каждого кэшированного файла.
Произведя небольшую математику с числами, которые вы опубликовали, 1024 МБ / 10724 файла ~ = 98 КБ на файл в среднем. Я полагаю, это возможно, в зависимости от того, что вы размещаете. Это общий сервер с множеством разных файлов PHP?
Вы можете установить параметр opcache.max_file_size
в конфигурации кэша, чтобы исключить любые большие файлы PHP из кеширования. Например, opcache.max_file_size = 102400
исключит из кеширования любые файлы PHP размером более 100 КБ. Значение этого параметра конфигурации выражается в байтах.
Говоря простым языком, Opcache берет файл PHP и загружает его в память. Затем, когда файл PHP запрашивается в какой-то новый момент (вероятно, другим пользователем), он извлекается из памяти, а не с диска. Это экономит как время ввода-вывода на диск, так и время на компиляцию файла PHP, поскольку он хранится в скомпилированном формате (отсюда и название кода операции). Ваши текущие настройки позволяют таким образом кэшировать до 50 000 файлов при использовании 1 ГБ памяти.
Может ли кто-нибудь объяснить использование памяти OPcache в терминах непрофессионала?
ldennison плюс различные комментаторы наверное / в основном ответили на эту часть.
Еще одно замечательное описание можно найти здесь: http://www.sitepoint.com/understanding-opcache/
Позвольте мне подвести итог:
OPcache позволяет предварительно выделить определенное объем памяти. Вы установили 1024, т.е. 1 ГБ. Это вы сообщаете своей системе: «кэшируйте до 1 ГБ скомпилированного скрипта php, чтобы компьютеру не приходилось переводить его из удобочитаемого кода PHP в единицы и нули, которые компьютер может понять каждый раз при запуске». Каждый раз, когда такой сценарий запускается в первый раз, его предварительно скомпилированная версия добавляется в эту кэш-библиотеку. Его еще не было в кеше при первом запуске, так что это был промах в кеше. Если он запрашивается снова и уже / все еще находится в кеше, он извлекается из кеша, экономя один «дорогостоящий» этап вычислений. Это представляет собой попадание в кеш.
Использование памяти просто означает, сколько из вашего 1 ГБ используется. Вы видите 100% использование. Это означает, что у вас есть 1 ГБ скриптов php, которые кешируются и готовы к работе из этого кеша. Кеш заполнен, поэтому либо новые скрипты не могут быть добавлены, либо непопулярные элементы кеша удаляются, в зависимости от настроек / движка.
Стоит ли мне беспокоиться по поводу 100% использования памяти?
Нет.
Если коэффициент попадания в кеш был низким, то есть он неоднократно искал в кеше файл, но не мог его найти (например, потому, что он там не помещался), тогда вам следует «беспокоиться». Но частота попаданий в кеш высока, что означает, что почти каждый раз, когда он что-то хочет от кеша, он это находит. Это означает, что размер кеш-памяти 1024 МБ, составляющий 1/8 от общей оперативной памяти сервера, очень хорош.
Увеличение размера кэша вдвое, вероятно, не приведет к значительному изменению скорости обращения к нему. Добавьте 100 МБ, и этого может быть достаточно, чтобы перейти с 96% до 98%.
Итак, «проблема», которую вы видите (100% использование памяти), не выглядит настоящей проблемой. Да, он полон, но не упускает из виду большую часть ценности. При таком размере он может удовлетворить 96% своих потребностей. Это отличная статистика.
Взгляните на это с другой стороны ...
Если библиотека заполнена до потолка и не имеет больше возможностей для дополнительных книг, но в ней уже хранится 96% всех книг в мире, стоит ли строить расширение?Придаст ли это удовлетворенности посетителям библиотеки? 96 из каждых 100 посетителей уже находят то, что хотят.