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.phpAPC – это аббревиатура от 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
class CacheAPC { var $iTtl = 600; // Time To Live var $bEnabled = false; // APC enabled? // конструктор function CacheAPC() { $this->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 скриптов, напишите об этом в комментариях.
Желательно установить акселератор 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)
Поведение этих функций зависит от установок в php.ini .
Несмотря на то, что настройки APC по умолчанию подходят для большинства установок, для некоторых задач может потребоваться более тонкая настройка.
При конфигурировании APC есть два главных момента, на которые необходимо обратить внимание. Первый - сколько памяти предоставить в распоряжение APC, а второй - будет ли APC проверять, модифицировался ли файл, при каждом запросе. За эти настройки отвечают параметры apc.shm_size и apc.stat , соответственно. Крайне внимательно прочитайте разделы, относящиеся к настройке этих параметров.
Как только сервер запущен, скрипт apc.php , поставляемый с этим расширением, должен быть скопирован в "docroot" и права на него должны позволять запустить его через браузер. Этот скрипт предоставляет детальную информацию по работе APC. Если в PHP разрешен GD, то этот скрипт также будет показывать полезные графики. Конечно же первое, что будет интересно, это то, кеширует ли APC что нибудь. Если APC работает, то значение Cache full count (слева) будет показывать, сколько раз кеш полностью заполнится и был вынужден принудительно удалить записи, к которым не обращались последние apc.ttl секунд. Чем меньше это число - тем лучше сконфигурирован кеш. Если это число постоянно растет, значит APC приходится постоянно очищать старые записи и значит теряется весь смысл кеширования. Самый лучший способ уменьшить это число - это добавить памяти для APC. Если сделать этого нельзя, то надо перенастроить apc.filters , чтобы ограничить набор кешируемых скриптов.
Если APC собран с поддержкой mmap (Memory Mapping), он будет использовать всего один сегмент памяти, если же наоборот, APC собран с поддержкой SHM (SysV Shared Memory), он будет использовать несколько сегментов. MMAP не имеет максимального ограничения, в отличие от SHM, который ограничивается /proc/sys/kernel/shmmax . Обычно рекомендуется использовать MMAP, потому что он гораздо быстрее выделяет память при перезагрузке веб-сервера, что сказывается на скорости запуска сервера.
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
apc.enabled | "1" | PHP_INI_SYSTEM | PHP_INI_SYSTEM в APC 2. PHP_INI_ALL в APC <= 3.0.12. |
apc.shm_segments | "1" | PHP_INI_SYSTEM | |
apc.shm_size | "32M" | PHP_INI_SYSTEM | |
apc.shm_strings_buffer | "4M" | PHP_INI_SYSTEM | Доступно с APC 3.1.4. |
apc.optimization | "0" | PHP_INI_ALL | PHP_INI_SYSTEM в APC 2. Удалено в APC 3.0.13. |
apc.num_files_hint | "1000" | PHP_INI_SYSTEM | |
apc.user_entries_hint | "4096" | PHP_INI_SYSTEM | Доступно с APC 3.0.0. |
apc.ttl | "0" | PHP_INI_SYSTEM | Доступно с APC 3.0.0. |
apc.user_ttl | "0" | PHP_INI_SYSTEM | Доступно с APC 3.0.0. |
apc.gc_ttl | "3600" | PHP_INI_SYSTEM | |
apc.cache_by_default | "1" | PHP_INI_ALL | PHP_INI_SYSTEM в APC <= 3.0.12. Доступно с APC 3.0.0. |
apc.filters | NULL | PHP_INI_SYSTEM | |
apc.mmap_file_mask | NULL | PHP_INI_SYSTEM | |
apc.slam_defense | "1" | PHP_INI_SYSTEM | Доступно с APC 3.0.0. До APC 3.1.4, значение по умолчанию "0" (disabled). |
apc.file_update_protection | "2" | PHP_INI_SYSTEM | Доступно с APC 3.0.6. |
apc.enable_cli | "0" | PHP_INI_SYSTEM | Доступно с APC 3.0.7. |
apc.max_file_size | "1M" | PHP_INI_SYSTEM | Доступно с APC 3.0.7. |
apc.use_request_time | "1" | PHP_INI_ALL | Доступно с APC 3.1.3. |
apc.stat | "1" | PHP_INI_SYSTEM | Доступно с APC 3.0.10. |
apc.write_lock | "1" | PHP_INI_SYSTEM | Доступно с APC 3.0.11. |
apc.report_autofilter | "0" | PHP_INI_SYSTEM | Доступно с APC 3.0.11. |
apc.serializer | "default" | PHP_INI_SYSTEM | Доступно с APC 3.1.0. |
apc.include_once_override | "0" | PHP_INI_SYSTEM | Доступно с APC 3.0.12. |
apc.rfc1867 | "0" | PHP_INI_SYSTEM | Доступно с APC 3.0.13. |
apc.rfc1867_prefix | "upload_" | PHP_INI_SYSTEM | |
apc.rfc1867_name | "APC_UPLOAD_PROGRESS" | PHP_INI_SYSTEM | |
apc.rfc1867_freq | "0" | PHP_INI_SYSTEM | |
apc.rfc1867_ttl | "3600" | PHP_INI_SYSTEM | Доступно с APC 3.1.1. |
apc.localcache | "0" | PHP_INI_SYSTEM | |
apc.localcache.size | "512" | PHP_INI_SYSTEM | Доступно в APC 3.0.14 - 3.1.11. |
apc.coredump_unmap | "0" | PHP_INI_SYSTEM | Доступно с APC 3.0.16. |
apc.stat_ctime | "0" | PHP_INI_SYSTEM | Доступно с APC 3.0.13. |
apc.preload_path | NULL | PHP_INI_SYSTEM | Доступно с APC 3.1.1. |
apc.file_md5 | "0" | PHP_INI_SYSTEM | Доступно с APC 3.1.1. |
apc.canonicalize | "1" | PHP_INI_SYSTEM | Доступно с APC 3.1.1. |
apc.lazy_functions | 0 | PHP_INI_SYSTEM | Доступно с APC 3.1.3. |
apc.lazy_classes | 0 | PHP_INI_SYSTEM | Доступно с APC 3.1.3. |
Краткое разъяснение конфигурационных директив.
Если установить apc.enabled равным 0, то APC не будет включен. Это полезно, когда APC статически включен в PHP и нет других вариантов, для запрета его использования. Если APC собран как DSO, можно просто закомментировать строку extension в php.ini .
Apc.shm_segments integer
Количество сегментов разделяемой памяти выделенной под кеш. Если APC использовал всю доступную разделяемую память, а apc.shm_size таким большим, как позволяет система, увеличение этого параметра может помочь.
Apc.shm_size string
Размер сегмента разделяемой памяти, заданный в короткой нотации (см. этот FAQ). По умолчанию некоторые системы (включая большинство вариантов BSD) ограничивают это значение крайне малым значением.
Apc.shm_strings_buffer string
Размер памяти отданный под разделяемый строковый кеш, используемый внутренними процессами APC. Размер должен завершаться суффиксом M или G для обозначения мегабайт и гигабайт, соответственно. Использование этого параметра может сократить размер памяти рабочих процессов PHP-FPM, так как одинаковые строки будут сохранены в памяти всего один раз и смогут использоваться всеми рабочими процессами.
Apc.optimization integer
Уровень оптимизации. Ноль запрещает оптимизаци. Чем выше это значение, тем более аггресивная оптимизация будет использована. Не ждите большого прироста в скорости. Это эксперементальная функциональность.
Apc.num_files_hint integer
Подсказка по количеству уникальных файлов, использующихся в вашем сайте. Установите равным нулю или вообще не указывайте, если не уверены. Эта настройка полезна, когда у вас много тысяч файлов.
Apc.user_entries_hint integer apc.file_update_protection integer
Когда файл изменяется на ходу, это должно происходить атомарным образом. То есть сначала его надо записать во временный файл, а затем переместить (mv ) на его целевую позицию. Многие текстовые редакторы, cp , tar и прочие не делают этого. Это может привести к тому, что файл будет запрошен (и закеширован) в момент его записи. Настройка apc.file_update_protection задает задержку кеширования для совершенно новых файлов. По умолчанию 2 секунды. Это означает, что если временная метка модификации файла (mtime ) говорит, что с если момента изменения файла прошло менее 2 секунд, он не будет кеширован. Несчастный человек, который попытается обратиться в полусохраненному файлу будет наблюдать странное поведение, но, по крайней мере, оно продлится не долго. Если все файлы веб-сервера будут обновляться атомарно, с помощью таких методов как rsync (который производит обновление корректно), то это поведение можно отключить установим этот параметр равным нулю. Если система перегружена по вводу/выводу, то некоторые обновления могут длиться больше двух секунд и эта настройка должна быть соответственно увеличина.
Apc.enable_cli integer
Больше для тестирования и отладки. Эта настройка разрешает APC для CLI-версии PHP. При обычной работе запускать APC, который будет создавать, наполнять и уничтожать кеш при каждом запуске сценария в консоли, будет далеко не лучшей идеей. Но в целях тестирования и отладки, можно легко включить APC для CLI.
Apc.max_file_size integer
Не кеширует файлы большего, чем задано этой настройкой, размера. По умолчанию 1M.
Apc.stat integer
Будьте осторожны меняя эту настройку. По умолчанию она включена, заставляя APC проверять файлы скриптов при каждом запросе на предмет не были ли они изменены. Если они были изменены, то они будут перекомпилированы и закешированы заново. Если же эту настройку отключить, то APC такую проверку производить не будет и если файл уже был закеширован, а после этого изменен, то новая версия в кеш не попадет. Для перекеширования потребуется перезагрузить веб-сервер. Обратите внимание, что веб-сервера, сконфигурированные для использования FastCGI могут не очищать кеш при перезапуске. В промышленных средах, где изменения файлов происходят крайне редко, отключение этой опции может значительно повысить производительность.
Для файлов загружаемых через included/required это опция работает замечательно, но имейте в виду, что при включении файла по относительному пути (в Unix это любой путь, не начинающийся с /), APC будет проверять его на уникальность. Если же используются абсолютные пути, APC будет пропускать эту проверку и использовать абсолютный путь как уникальный идентификатор файла.
Apc.write_lock boolean
На высоконагруженных серверах, когда сервер стартует, или когда множество файлов изменяются одновременно, APC может попытаться скомпилировать и закешировать один и тот же файл несколько раз одновременно. Блокировка записи гарантирует, что только один процесс будет пытаться компилировать и кешировать некешированный файл. Другие процессы, которым нужно использовать этот файл, будут использовать его некешированную версию, вместо того, что бы ждать его появления в кеше.
Apc.report_autofilter boolean
Логирует любые скрипты, которые были исключены из кеширования из-за проблем раннего или позднего связывания.
Apc.serializer string
Указывает APC использовать сторонний сериализатор.
Apc.include_once_override boolean
Оптимизирует вызовы include_once и require_once для предотвращения дорогих системных вызовов.
Внимание
Этот функционал является ЭКСПЕРЕМЕНТАЛЬНЫМ . Поведение этой директивы, ее имя и документация на нее могут измениться без предупреждения в будущих версиях APC. Используйте ее на свой страх и риск.
Apc.rfc1867 boolean
Перехватчик прогресса загрузки файлов RFC1867 доступен в APC только если он собран с PHP 5.2.0 и выше. Если разрешено, то любой загружаемый на сервер файл, содержащий в форме, перед полем с файлом, поле с именем APC_UPLOAD_PROGRESS , будет вынуждать APC автоматически создавать пользовательскую запись в кеше вида upload_key , где key - это значение поля APC_UPLOAD_PROGRESS .
Помните, что скрытое поле APC_UPLOAD_PROGRESS должно идти до поля с файлом, иначе работа будет некорректной.
Обратите внимание, отслеживание загрузки файла потоконебезопасна, так что если во время первой загрузки случится новая, с тем же ключем, отслеживание первой будет прекращено.
Обратите внимание, что rate будет доступен только когда все текущие загрузки завершены.
Пример #1 Пример использования apc.rfc1867
print_r
(apc_fetch
("upload_
$_POST
[
APC_UPLOAD_PROGRESS
]
"
));
?>
Результатом выполнения данного примера будет что-то подобное:
Array ( => 1142543 => 1142543 => 1828068.8 => test => file => /tmp/php8F => 0 => 1)
Apc.rfc1867_prefix string
Префикс ключа для использования в записи кеша пользователя, создаваемой функционалом отслеживания прогресса загрузки rfc1867.
Apc.rfc1867_name string
Задает имя для скрытого поля формы, которое будет активировать процесс загрузки APC и указывать суффикс ключа пользовательского кеша.
Apc.rfc1867_freq string
Частота, с которой будет обновляться пользовательская запись в кеше во время загрузки файла. Может задаваться как в процентах, так и указанием размера в байтах. При желании можно использовать суффиксы "k" , "m" и "g" (регистронезависимо) для килобайт, мегабайт и гигабайт, соответственно. Если указать ноль, то обновления будут происходить так быстро, как только возможно, но это может замедлить загрузку.
Apc.rfc1867_ttl integer
TTL для записей rfc1867.
Apc.localcache boolean
Разрешает неблокирующий локальный теневой кеш процессов, что уменьшает количество блокировок во время записи кеша.
Apc.localcache.size integer
Размер локального теневого кеша процессов, должен быть достаточно большим, примерно в половину apc.num_files_hint .
Apc.coredump_unmap boolean
Разрешает APC перехватывать сигналы, такие как SIGSEGV, который записывает coredump, когда подан. Когда эти сигналы будут получены, APC попытается освободить всю разделяемую память, чтобы не включать ее в coredump. Эта настройка может увеличить стабильность системы, когда критический сигнал был получен, а APC сконфигурирован на использование большого объема памяти.
Внимание
Эта возможность потенциально опасна. Освобождение сегментов разделяемой памяти при получении критического сигнала может привести к непредсказуемому поведению.
apc.stat_ctime integerЗамечание :
Хотя некоторые ядра предоставляют возможность игнорировать некоторые сегменты разделяемой памяти при записи core-файла, эти реализации могут также игнорировать важные сегменты памяти, такие как Apache scoreboard.
Проверка по ctime для избежания проблем, порожденных такими программами как svn или rsync, убедившись, что inode не поменялся с момента последнего сбора статистики. Обычно APC проверяет только mtime.
Apc.canonicalize bool
Если запрещено, то относительные пути приводятся к каноничным в режиме no-stat. Если разрешено, то файлы, подключенные через потоковую обертку не будут кешироваться, так как realpath() не поддерживает потоковые обертки.
Apc.preload_path string
Опционально. Задает путь, который используется APC для загрузки кешированных данных во время запуска.
Apc.use_request_time bool
Использовать время старта запроса SAPI для TTL .
Apc.file_md5 bool
Записывать хеши md5 файлов.
Apc.lazy_functions integer
Разрешает ленивую подгрузку функций.
Apc.lazy_classes integer
Разрешает ленивую подгрузку классов.
Конфигурационный файл располагается чаще всего в /etc/php.d/apcu.ini. Пример конфигурационного файла для сервера с 8 ГБ оперативной памяти:
extension=apcu.so
apc.enable_cli = 1
apc.shm_segments = 1
apc.shm_size = 512M
apc.stat = 1
apc.ttl = 0
apc.user_ttl = 0
apc.max_file_size = 1M
apc.num_files_hint = 16384
apc.user_entries_hint = 16384
apc.file_update_protection=10
При использовании PHP 5.3, указывается extension=apc.so
FastCGI замечание : The popular APC opcode cache for PHP cannot share a cache between PHP FastCGI processes unless PHP manages the child processes. Thus, the effectiveness of the cache is limited with mod_fcgid; concurrent PHP requests will use different opcode caches.
Описание основных атрибутов конфигурации APCu
apc.shm_segments | Количество выделяемых сегментов памяти. Многие BSD системы имеют низкие лимиты на выделяемый сегмент памяти. По умолчанию 1. |
apc.shm_size | Размер сегмента совместно используемой памяти, устанавливается в мегабайтах. Минимально мы рекомендуем устанавливать 128M, для сервера с 8Гб - 512M, с 16Гб - 1024M. В случае использования нескольких сегментов, размер памяти необходимо делить на количество сегментов. |
apc.stat | С помощью этой опции можно отключать и включать APC. Значение 1 - включено, 0 - выключено. |
apc.ttl | Время кэширования php-файлов. При установке в 0 позволяет очищать кэш целиком в случае заполнения выделенной памяти. |
apc.user_ttl | Время кэширования пользовательских данных. При установке в 0 позволяет очищать кэш целиком в случае заполнения выделенной памяти. |
apc.max_file_size | Максимальный размер кэшируемого файла. |
apc.num_files_hint | Используется APC для оптимизации организации хранения данных файлов в памяти. Рекомендуем устанавливать значение больше 10000. |
apc.user_entries_hint | Используется APC для оптимизации организации хранения пользовательских переменных в в памяти. Рекомендуем устанавливать значение больше 10000. |
apc.file_update_protection | Не кэшировать файлы, созданные менее указанных секунд назад. Позволяет избежать кэширования частично-записанного файла. |
Ошибка Unable to allocate memory for pool
Ошибка include(): Unable to allocate memory for pool возникает при сильной фрагментации памяти, минимизировать фрагментацию памяти помогает установка в ноль значения опции apc.ttl и apc.user_ttl .
Программы