Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Настройка APC. Кеширование в php.

03/12/2019, by Ivan

!!! Внимание !!! не используйте apc если у вас PHP версии 5.5 или выше, OPCache замещает apc и встроен в PHP.

On the 21st March 2013, the PHP 5.5 beta 1 was released including "Zend OPCache" - It looks firmly like this will be the replacement for APC going forward as it is included in the PHP core, and will have to be maintained for each new release.

APC - альтернативный кэш PHP, записывает код операции в кэш PHP, или, как разработчики описывают его: "APC является свободной, открытой и надежной системой для кэширования и оптимизации промежуточного кода PHP".

PHP является высокоуровневым языком. Как и во всех языках высокого уровня, он может быть составлен быть скомпилирован на различных платформах. Системы управления контентом, такие как Drupal состоят из сотен, если не тысячи скриптов PHP, а также модульная природа таких систем означает, что при каждой загрузке страницы действительно может использовать сотни из этих сценариев. В отличие от языков высокого уровня, PHP подцепляется на лету, то есть фактическии сценарий преобразуется в байт-код во время исполнения. Здесь APC приходит на подмогу: APC можно сохранить копию скомпилированный скрипт в памяти и готов к работе, что значительно сокращает объем ресурсов, необходимых для Drupal. (Стоит отметить, что в некоторых языках это делается автоматически - Python скрипт на сервере Apache передается переводчику Python, оставляя скомпилированную версию сценария в непосредственной близости от самого сценария, который веб-сервер будет использовать для доступа к будущему)
Настраивается APC очень просто. Сначала необходимо его установить:

sudo apt-get install php-pear
sudo apt-get install php5-dev apache2-prefork-dev build-essential
sudo pecl install apc

Теперь нужно скопировать файл apc.php, который я прикрепил к уроку положить на сервер, после этого перезагружаем апач:

sudo /etc/init.d/apache2 restart

Теперь можете открыть файл http://test/apc.php и посмотреть статистику apc.

Drupal APC

Будет примерно вот такая вот статистика. Как видите на диаграммах картина не очень. Очень большое количества отсутствия файлов в кеше (MISS) и маленькое количетсво наличия файлов в кеше (HITS). И фрагментация файлов в памяти APC высока. Все это говорит об неэффективном использование APC. Почему это происходит:

Не хватает памяти: если у вас 8 МБ для APC, а размер подгружаемых скриптов 12 МБ, то вам не хватит 8 МБ под эти файлы, поэтому появляются новые MISS.

Фрагментация: возможно что размер памяти под APC у вас 32 МБ, но файлов на 40 МБ. Но не всегда все файлы используются. Например какой-то модуль подгружается время от времени и используйтся редко. И может так получится, что из-за настроек APC, эти файлы будут в кэше лежать без дела, когда активные файлы будут нуждаться в кеширование. Файлы в кэш записываются не всегда блоками, возможно что размер файла большой и чтобы его уместить его в кеше нужно разбить его на две части, и получается в памяти появляются пробелы.

Но для начала разберемся с полями конфигурации APC, файл конфигурации APC в debian/ubuntu находится в /etc/php5/conf.d/apc.ini:

apc.enabled=1

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

apc.shm_segments=1
apc.shm_size=32

Эти настройки показывают сколько памяти выделять под APC. APC.shm_segments=1 - показывает что выделяется один сегмент памяти, а apc.shm_size=32 показывает, что размер этого сегмента 32 мегабайта. Вы можете поменять размер сегмента, скажем на 64 мегабайта и перезапустить апач. Потом если количество MISS не будет сведено к 1% сделать размер 128 МБ  и так далее. Мне кажется это основной параметр для работы с APC.

apc.cache_by_default=1

;apc.filters=

Работа APC для всех php скриптов. При этом мы можем закомментировать строчку с apc.filters.

apc.cache_by_default=0
apc.filters="+drupal6"

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

apc.stat=1

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

apc.ttl=0

Эта настройка показывает через сколько милисекунд очистить кеш. При 0 кеш не очищается. Поэтому мы ставим 0, мы же не хотим чтобы каждый час нужный нам кэш очищался (по умолчанию 7200, то есть 2 часа).

apc.rfc1867=1

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

apc.num_files_hint=2048

Эта настройка может быть очень нужна, когда на сервере несколько сайтов, несколько друпалов. Потому что один друпал может забивать в кэш более 500 файлов. Чтобы кеш одного сайта не затирал в кэше файлы другого, лучше включить эту настройку побольше (по умолчанию 1024).

После правки настроек, не забудьте перезагрузить сервер. В результате у вас должны быть вот такие графики:

Drupal APC

Заметьте что количество MISS должно быть близко к нулю, а фрагментация 0%.