Apc кэширование. Настройка кэширования в APCu

THE BELL

Есть те, кто прочитали эту новость раньше вас.
Подпишитесь, чтобы получать статьи свежими.
Email
Имя
Фамилия
Как вы хотите читать The Bell
Без спама

Желательно установить акселератор php-скриптов, который позволит снизить нагрузку на ваш web-server. Ускоритель компилирует наиболее часто используемые php-скрипты и при обращении подгружает не исходный код, а его скомпилируемую версию. За счет чего происходит ускорение исполнения и отображения вашего сайта. Особенно это заметно на "тяжелых" CMS типа Битрикс.

Для установки ускорителя APC сначала необходимо установить XCode c с компонентом командной строки.

После обновления Mac OS X на версию 10.9 Maverick необходимо заново установить компонент командной строки. Теперь он устанавливается не через графический интерфейс, а с помощью командной строки: xcode-select --install

Иначе при установке расширений с помощью pecl будет вылазить ошибка "не найден файл php.h"

./configure make sudo make install

Sudo pecl install apc

Если все прошло нормально, то проверьте установку APC php-скриптом с командой phpinfo(). при выполнении команды может быть полный отказ, в этом случае необходимо попробовать следующее:

Если данная команда не прошла, то у Вас скорее всего не установлен PEAR и PECL. Их необходимо скачать c помощью команды curl и установить

Curl -O http://pear.php.net/go-pear.phar sudo php -d detect_unicode=0 go-pear.phar

На запрос о конфигурации PEAR необходимо исправить параметры 1 и 4. Там где будет

11. Name of configuration file:

1-11, "all" or Enter to continue:

Ответьте сначала 1. И введите адрес:

/usr/local/pear

Затем ответьте 4 и введите следующий адрес

После этого нажмите ввод. PEAR установлен. Проверить можно командой

Pear version

После этого еще раз попробуйте

В этот раз у меня был отказ со следующим сообщением

Cannot find autoconf. Please check your autoconf installation and the

$PHP_AUTOCONF environment variable. Then, rerun this script.

ERROR: `phpize" failed

Для устранения данной ошибки необходимо скачать и установить autoconfig следующими командами терминала

Curl http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz > autoconf.tar.gz tar -xvzf autoconf.tar.gz cd autoconf-* ./configure --prefix=/usr/local sudo make install

После установки autoconfig команда:


sudo pecl install apc

На все вопросы задаваемые при компиляции APC отвечаем вводом по умолчанию. Если на вопрос

Enable internal debugging in APC : y

То в этом случае при выполнении кода могут получаться сообщения об ошибках выполнения самого APC. Правильный ответ no.

Установка прошла успешно. Теперь делаем перезапуск apache

Sudo apachectl restart

Если Вы делаете переустановку APC после обновления на Mavericks возможен глюк, связанный с существованием в системе старой версии phpize. В этом случае могут помочь следующие команды, обновляющие конфигурацию pecl sudo pear config-set php_ini /etc/php.ini sudo pecl config-set bin_dir /usr/bin/

Необходимо убедиться, что в файле /etc/php.ini есть строка и в случае необходимости ее добавить.

Extension=apc.so

И опять перезапустить apache.

Проверяем в phpinfo()


Битрикс требует установки дополнительных параметров. Настройки APC находятся в файле

Я установил для себя следующие параметры:

Apc.ttl=7200
apc.max_file_size= 64M
apc.shm_size = 64M

Что дало изменение производительности (если верить монитору производительности Bitrix) c 10,62 единиц до 40,52)
Вот вроде и все.

Основные параметры настроек APC

  • apc.enabled – позволяет включить или отключить APC
  • apc.shm_segments – количество сегментов shared memory, которые будет использовать apc. Некоторые системы имеют ограничение на максимальный размер сегмента, поэтому можно настроить apc на использование нескольких сегментов.
  • apc.shm_size – размер одного сегмента shared memory, используемого apc.
  • apc.ttl – сколько секунд должны отсутствовать обращения к записи кэша прежде, чем apc перезапишет ее.
  • apc.user_ttl – по описанию тоже самое, что и apc.ttl. Обычно устанавливается равным apc.ttl.
  • apc.stat – указывает, нужно ли apc проверять время модифицирования php-скрипта. Если установить в 0, то apc не будет проверять изменения на диске и будет выдавать кэшированную копию.

Pecl install uploadprogress

Правда могут потребоваться права супер-пользователя (root)


APC – это аббревиатура от Alternative PHP Caching . Русским текстом – это альтернативный PHP кэшер. Для чего он используется? Как и другие популярные кэшеры, такие как XCache и eAccelerator, он используется для увеличения скорости работы PHP скриптов. Если вы имеете собственный сервер, и вас волнуют вопросы быстродействия PHP скриптов, то APC может стать решением вашей проблемы. В сегодняшней статье мы более подробно узнаем о APC, научимся его устанавливать и тестировать, использовать APC кеширование при написании PHP скриптов.

Что такое акселератор APC?

Акселератор APC (Alternative PHP Cache) - бесплатный и открытый opcode кэшер для PHP. Он был задуман, как бесплатный, открытый и стабильный фреймворк для кэширования и оптимизации исходного кода PHP. APC находится на стадии своего развития. На данный момент поддерживает PHP 4 и PHP 5, включая 5.3. Предположительно будет включен в стандартное ядро PHP шестой версии.
Каким образом достигается ускорение работы PHP?
Когда идет задержка загрузки вашего сайта, возникает вопрос – Почему? Дело в том, что при выполнении стандартного обращения к PHP скрипту, каждый раз он компилируется заново. То есть, одна и та же работа делается несколько раз. Если это маленький проект, замедления в работе могут быть незначительными, даже невидимыми. Но если у вас большой проект (сайт), то вы замечали, что при обращении идет задержка загрузки страницы, несмотря на то, что сайт хорошо оптимизирован, в плане сжатия html и сжатия css . Для наглядности, посмотрим, как выполняется стандартный запрос без использования PHP акселераторов:

При этом идут выполнения компиляции кода прикаждом запросе. Это отнимает много время на обработку запроса, потому и тормозит. Для обхода этого и придумали акселераторы, представителем которого является APC. Они кэшируют скомпилированный код на диске, после обращения к которому, он выводит результат. Таким образом увеличивается скорость работы PHP. APC может работать в двух режимах, которые настраиваются в файле /etc/php.d/apc.ini , переменная apc.stat . Переменная может принимать значения 1 и 0 (apc.stat=0 или apc.stat=1). При использование режима apc.stat=1 несколько замедляется работа скриптов так, как идет проверка на модификацию файла, но это позволяет избежать проблем, когда код изменен, а выдача результата остается прежней. Поэтому советую поставить значение переменной 1.
После установки акселератора APC, схема выполнения запроса будет следующей:

Установка акселератора APC

Так как в apt обновленные версии добавляются с сильным опозданием. Поэтому будем устанавливать APC через PECL:

Sudo apt-get remove --purge php-apc sudo apt-get install libpcre3-dev sudo pecl install apc
При установке задаем такую конфигурацию (YMMV):
Enable internal debugging in APC : noдержку Enable per request file info about files used from the APC cache : no Enable spin locks (EXPERIMENTAL) : no Enable memory protection (EXPERIMENTAL) : no Enable pthread mutexes (default) : yes Enable pthread read /write locks (EXPERIMENTAL) : no Теперь надо включить APC в настройках, т.к. это не делается автоматически. Для этого создаем файл apc.ini в соответствующем каталоге: sudo vim /etc/php5/conf.d/apc.ini и записываем в этом файле следующие настройки(рекомендованные для работы с Magento) extension=apc.so apc.enabled=1 apc.shm_size=512M apc.num_files_hint=10000 apc.user_entries_hint=10000 apc.max_file_size=5M apc.stat=0 apc.optimization=0 apc.shm_segments=1 apc.enable_cli=1 apc.cache_by_default=1 apc.include_once_override=1

Включаем поддержку APC в Magento

Открываеи файл конфигурации Magento: vi app/etc/local.xml и добавляем следуюший код в секцию global:


apc File 0 1 MAGE_ или apc database 0 1 MAGE_


Где между тегами «Prefix» указывается краткое описание магазина чтобы была возможность использовать APC для кеширования нескольких магазинов построенных на одной Magento.

Как проверить работу APC?

Прежде всего, вы должны заметить, что PHP скрипты Magento стать работать быстрее. Используйте Firebug и плагин к нему например YSlow для оценки скорости работы сайта. Вы можете скачать Firebug расширение для Firefox здесь. Кроме того вы можете использовать файл apc.php скопировав его из папки дистрибьютива APC в папку public вашего проекта: sudo cp /usr/share/php/apc.php /ваш путь к public Теперь можно в браузере открыть этот файл: http://yourhost.local/apc.php sudo apt-get install php-apc - не работает

APC больше не нужен в Ubuntu 14.04. APC не поддерживается в PHP 5.5, который идет со своим встроенным Opcache кэшем взамен. Убедитесь, что кэш включен, отредактируйте файл /etc/php5/apache2/php.ini .
Замените:

;opcache.enable=0

Opcache.enable=1

Затем убедитесь что, модуль php активирован:

# php5enmod opcache

Наконец, перезагрузите Apache:

Service apache2 restart

Проверка:

Http:///info.php

Создайте файл info.php следующего содержания в корне директории web сервера /var/www/html/

И откройте его в браузере. Там вы найдете информацию о PHP, в том числе и о включенном кэше. Не оставляйте этот файл на продакшн сервере. Удалите его после проверки.
Должны увидеть:

Zend OPcache Opcode Caching Up and Running Optimization Enabled И т.д.

How To Install Alternative PHP Cache (APC) on Ubuntu 12.04

Установка из PECL

Для установки из репозитория Ubuntu смотрите ниже.

About APC.
APC is a great operation code caching system for PHP that can help speed up your site. PHP is a dynamic server-side scripting language that needs to be parsed, compiled and executed by the server with every page request. In many cases though, the requests produce exactly the same results which means that the cloud server has to unnecessarily repeat all these steps for each of them.
This is where APC comes into play. What it does is save the PHP opcode (operation code) in the RAM memory and if requested again, executes it from there. In essence, it bypasses the parsing and compiling steps and minimizes some unnecessary loads on the cloud server.

Предполагается, что у вас имеется собственный VPS с привилегиями root"а и установленный LAMP.

Для начала установите пакеты:

Sudo apt-get install php-pear php5-dev make libpcre3-dev

Теперь вы можете установить APC используя команду pecl:

Sudo pecl install apc

Вам будет предложено ответить на несколько вопросов, но до тех пор пока вы не узнаете точный ответ, используйте значение по умолчанию нажимая Enter.

Следующий и последний шаг - отредактируйте файл php.ini

добавив в конец строку:

Extension = apc.so

Сохраните файл и перезапустите Apache:

Sudo service apache2 restart

Что бы проверить включен-ли APC, проверьте страницу PHP info. Если у вас нет оной, создайте ее в директории /var/www:

Nano /var/www/info.php

и вставьте код:

Откройте его в браузере. Там вы найдете информацию о PHP, в том числе и о включенном кэше. Не оставляйте этот файл на продакшн сервере. Удалите его после проверки.

Настройка APC

Вы установили APC и он запущен с настройками по умолчанию. Существует по меньшей мере две настройки, о которых вам следует знать. Откройте php.ini , который вы уже редактировали:

Sudo nano /etc/php5/apache2/php.ini

Под строчкой, который вы включили APC, добавьте:

Apc.shm_size = 64

Это позволит APC использовать 64MB памяти RAM для кэширования. В зависимости от конфигурации вы можете изменять это значение.
Следующая строка, которую следует добавить:

Apc.stat = 0

Параметр apc.stat проверяет script при каждом запросе, изменился он или нет. Если скрипт изменился APC перекомпилирует его и кэширует новую версию. Это дефолтное поведение APC после установки. Устанавливая значение параметра в 0 мы говорим APC не проверять изменения скрипта. Это улучшает производительность, но при этом, если скрипт был изменен, изменения не применятся до перезагрузки сервера. Таким образом значение 0 рекомендуется использовать только на продакшн сервере, где нет постоянных изменений кода.

Мониторинг APC
Существует небольшой скрипт для мониторинга статуса и производительности APC кэша.

Вы можете скопировать файл apc.php из /usr/share/php/ в рабочую директорию web сервера, например /vwr/www:

Cp /usr/share/php/apc.php /var/www - для установленного из pecl

Или скачать:

Wget http://pecl.php.net/get/APCu -O - | tar xz --wildcards apcu*/apc.php

Теперь обратитесь к этому файлу из браузера:

Http:///apc.php

Вы должны увидеть статистику APC. Обратите внимание, что APC хватает памяти и фрагментация не очень велика.
Хорошим признаком будет высокий процент попадания в кэш, около 95% после нескольких запросов.

Установка APC cache из репозитория Ubuntu

$ sudo apt-get install php-apc

Перезапустить Apache и посмотрите info.php . Должна появится секция APC (Enabled On).
Для монитроинга используйте утилиту, входящую в комплект поставки:

Cd /usr/share/doc/php-apc # gunzip apc.php.gz

Скопируйте файл apc.php , например, в /var/www
Обратитесь к файлу из браузера:

Http:///apc.php

Ошибка:
No cache info available. APC does not appear to be running.

появляется, если в коде apc.php не задан пароль.
Отредактируйте файл apc.php:

# vi /var/www/apc.php

и задайте имя пользователя и пароль:

Defaults("ADMIN_USERNAME","apc"); // Admin Username defaults("ADMIN_PASSWORD","pass"); // Admin Password - CHANGE THIS TO ENABLE!!!

Defaults("USE_AUTHENTICATION",0);

Дополнительные опции в /etc/php5/apache2/conf.d/apc.ini

;apc.enabled=1 – не актуально;apc.enable_cli=1 – не актуально;apc.shm_size=64M # по умолчанию 32M ;apc.stat = 0

APC – это аббревиатура от Alternative PHP Caching . Русским текстом – это альтернативный PHP кэшер. Для чего он используется? Как и другие популярные кэшеры, такие как XCache и eAccelerator, он используется для увеличения скорости работы PHP скриптов. Если вы имеете собственный сервер, и вас волнуют вопросы быстродействия PHP скриптов, то APC может стать решением вашей проблемы. В сегодняшней статье мы более подробно узнаем о APC, научимся его устанавливать и тестировать, использовать APC кеширование при написании PHP скриптов.

Сегодня мы узнаем

Что такое акселератор APC?

Акселератор APC (Alternative PHP Cache) - бесплатный и открытый opcode кэшер для PHP. Он был задуман, как бесплатный, открытый и стабильный фреймворк для кэширования и оптимизации исходного кода PHP. APC находится на стадии своего развития. На данный момент поддерживает PHP 4 и PHP 5, включая 5.3. Предположительно будет включен в стандартное ядро PHP шестой версии.

Каким образом достигается ускорение работы PHP?

Когда идет задержка загрузки вашего сайта, возникает вопрос – Почему? Дело в том, что при выполнении стандартного обращения к PHP скрипту, каждый раз он компилируется заново. То есть, одна и та же работа делается несколько раз. Если это маленький проект, замедления в работе могут быть незначительными, даже невидимыми. Но если у вас большой проект (сайт), то вы замечали, что при обращении идет задержка загрузки страницы, несмотря на то, что сайт хорошо оптимизирован, в плане и . Для наглядности, посмотрим, как выполняется стандартный запрос без использования PHP акселераторов:

При этом идут выполнения компиляции кода прикаждом запросе. Это отнимает много время на обработку запроса, потому и тормозит. Для обхода этого и придумали акселераторы, представителем которого является APC. Они кэшируют скомпилированный код на диске, после обращения к которому, он выводит результат. Таким образом увеличивается скорость работы PHP. APC может работать в двух режимах, которые настраиваются в файле /etc/php.d/apc.ini , переменная apc.stat . Переменная может принимать значения 1 и 0 (apc.stat=0 или apc.stat=1). При использование режима apc.stat=1 несколько замедляется работа скриптов так, как идет проверка на модификацию файла, но это позволяет избежать проблем, когда код изменен, а выдача результата остается прежней. Поэтому советую поставить значение переменной 1.

После установки акселератора APC, схема выполнения запроса будет следующей:

Установка APC

APC очень простой в установке. Его можно устанавливать как на Debian/Ubuntu, так и на другие дистрибутивы.

Установка APC на CentOS, RHEL, Fedora:

Будем устанавливать через PECL. Сначала подключаем.repo, который содержит актуальный APC. Смотрите пример ниже:

wget http://rpm.scwlab.com/el/php/yum.conf -O /etc/yum.repos.d/stalwart.repo

yum install php-pecl-apc

Теперь, измените настройки файла /etc/php.d/apc.ini на свой вкус и сделайте рестарт сервера.

Установка APC на Debian, Ubuntu

apt-get install apache2-threaded-dev php5-dev php5-pear make gcc g++

pecl install apc

После загрузки, откройте файл по адресу /etc/php5/apache2/php.ini, добавьте параметр extension=apc.so , и перезапустите сервер.

Как видите, установить APC на Debian или Ubuntu, достаточно просто, нужно набрать в консоли команду sudo aptitude install php-apc . Также можно установить это расширение через synaptic . Если у вас другой дистрибутив, то вы можете установить пакет APC из PECL. Для этого выполните в консоле следующую команду sudo pecl install apc .

Проверка наличия пакета APC

Если в файле настроек php.ini, присутствует строка загрузки пакета extension=apc.so . Или создан файл apc.ini с идентичной строкой, в папке конфигурации расширений PHP. У каждого дистрибутива, он находится по своему адресу. Для Debian, это /etc/php5/apache2/conf.d/.

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



Использование APC в PHP

Использовать расширение APC при написании PHP кода, очень просто и удобно. Сейчас вы сами убедитесь в этом.

Для начала, мы напишем класс, для работы с памятью через APC систему кэширования. Создайте файл и поместите туда код по следующему адресу:

classes/apc.caching.php

bEnabled = extension_loaded("apc"); } // получаем данные с памяти function getData($sKey) { $bRes = false; $vData = apc_fetch($sKey, $bRes); return ($bRes) ? $vData:null; } // сохраняем данные в память function setData($sKey, $vData) { return apc_store($sKey, $vData, $this->iTtl); } // удаляем данные с памяти function delData($sKey) { $bRes = false; apc_fetch($sKey, $bRes); return ($bRes) ? apc_delete($sKey) : true; } } ?>

В классе описано, что делает каждая из функций. Теперь создадим тестовый файл.

index.php

"table", "color" => "brown", "size" => array("x" => 200, "y" => 120, "z" => 150,), "strength" => 10,); require_once("classes/apc.caching.php"); $oCache = new CacheAPC(); echo "Данные:

"; // Посмотрим что мы имеем
print_r($aData);
echo "
"; if ($oCache->bEnabled) { // Если APC доступен $oCache->setData("my_object", $aData); // Сохраняем данные в памяти $oCache->setData("our_class_object", $oCache); // Сохраняем объект класса в памяти echo "По теории, мы сохранили данные в памяти, нажмите здесь для проверки, действительно ли все там."; } else { echo "Пакет APC не установлен, установите, а потом будете тестировать!"; } ?>

В этом файле мы сохранили 2 объекта в память: массив и объект класса. Теперь создадим второй файл.

index2.php

bEnabled) { // Если APC доступен $aMemData = $oCache->getData("my_object"); // Получаем данные из памяти $aMemData2 = $oCache->getData("our_class_object"); // получаем данные из памяти, которые в классе echo "Данные в памяти:

"; // проверим, что у нас в памяти
 print_r($aMemData);
 echo "
";
 echo "Как видите все данные доступны, теперь давайте извлечем их из памяти, для этого идем сюда…";
} else {
 echo "Пакет APC не установлен, установите, а потом будете тестировать!";
}
?>

В данном скрипте, мы только читаем информацию из памяти. Как вы видите, вся информация отлично считывается с памяти. Давайте посмотрим последний пример.

index3.php

bEnabled) { // Если APC доступен $oCache->delData("my_object"); // Извлечение данных из памяти $oCache->delData("our_class_object"); // Извлечение данных из памяти $aMemData = $oCache->getData("my_object"); // пытаемся получить данные обратно $aMemData2 = $oCache->getData("our_class_object"); echo "Данные из памяти:

"; // Проверим, что у нас хранится в памяти
 print_r($aMemData);
 echo "
"; echo "Данные из памяти объекта CacheAPC class:
";
 print_r($aMemData2);
 echo "
"; echo "Как видите все данные извлечены из памяти. Ура!"; } else { echo "Пакет APC не установлен, установите, а потом будете тестировать!"; } ?>

Заключение

Спасибо за ваше внимание! Надеюсь вам было интересно почитать об использовании APC в PHP. Если вы имеете другие представления об использовании APC при написании PHP скриптов, напишите об этом в комментариях.

THE BELL

Есть те, кто прочитали эту новость раньше вас.
Подпишитесь, чтобы получать статьи свежими.
Email
Имя
Фамилия
Как вы хотите читать The Bell
Без спама