Мой 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 ГБ ОЗУ (Линод)
Может ли кто-нибудь объяснить использование памяти 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 посетителей уже находят то, что хотят.
Ваш предел памяти 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 ГБ памяти.