→ Apc кэширование. Установка ускорителя php приложений APC на OS X Mountain Lion. Включаем поддержку APC в Magento

Apc кэширование. Установка ускорителя php приложений APC на OS X Mountain Lion. Включаем поддержку APC в Magento

Поведение этих функций зависит от установок в 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
Имя По умолчанию Место изменения Список изменений
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.
Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации .

Краткое разъяснение конфигурационных директив.

Если установить 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 сконфигурирован на использование большого объема памяти.

Внимание

Эта возможность потенциально опасна. Освобождение сегментов разделяемой памяти при получении критического сигнала может привести к непредсказуемому поведению.

Замечание :

Хотя некоторые ядра предоставляют возможность игнорировать некоторые сегменты разделяемой памяти при записи core-файла, эти реализации могут также игнорировать важные сегменты памяти, такие как Apache scoreboard.

apc.stat_ctime integer

Проверка по 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

Разрешает ленивую подгрузку классов.

Апрель 9, 2015 12:12 пп 1 889 views | Комментариев нет

Что такое APC?

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

В этом случае на помощь приходит APC, или Alternative PHP Cache. Этот инструмент сохраняет код PHP в операционной памяти и при необходимости извлекает его. В сущности, он обходит обработку и компиляцию кода, что позволяет свести к минимуму нагрузку на сервер.

Данное руководство продемонстрирует установку и настройку APC.

Примечание : Для выполнения руководства нужен предварительно с привилегиями root, а также .

Установка APC

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

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

Затем можно установить APC при помощи команды pecl:

sudo pecl install apc

В завершение установки нужно отредактировать файл php.ini:

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

extension = apc.so

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

sudo service apache2 restart

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

nano /var/www/info.php

И внесите в него такой код:

phpinfo();
?>

Сохраните и закройте файл, а затем откройте браузер. На экране появится вся информация о текущей установке PHP. Если APC включён, страница сообщит об этом. В целом, оставлять этот файл не рекомендуется, так как он может предоставить доступ к конфиденциальным данным посторонним пользователям. Удалите его после выполнения проверки.

Настройка APC

После установки кэшер APC запускается с настройками по умолчанию. В его конфигурациях есть две очень важные настройки. Итак, откройте файл php.ini:

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

Под ранее добавленной строкой, которая включает APC, внесите следующую строку:

apc.shm_size = 64

Это выделит 64MB оперативной памяти для кэширования APC. В зависимости от требований или ограничений виртуального выделенного сервера это значение может изменяться.

Ниже нужно добавить ещё одну строку:

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

Теперь, когда кэшер APC установлен и запущен, можно проверить его состояние и производительность. Найдите файл apc.php в папке /usr/share/php/ и переместите его в папку, доступную для браузера – к примеру, в www.

рыцарь со стволом 9 июля 2011 в 23:03

Начальная настройка ИБП APC в Linux с точки зрения чайника

  • Чулан *

Купив источник бесперебойного питания от APC (а именно - APC Back-UPS ES 550VA), я с удивленьем обнаружил, что «из коробки» он не может похвастаться тесной дружбою с Linux. Конечно, XFCE Power Manager, входящий в состав XFCE 4.4, подхватил и разпознал UPS, но всё, на что он оказался способен - отображение в трее уровня заряда. Какие-либо настройки отсутствовали начисто, нельзя было даже задать выключение ПК при достижении определённого уровня заряда.

Обратившись за консультацией в гугл, я узнал о существовании замечательного демона apcupsd, чья роль заключается в - никогда не поверите - управлении ИБП от APC. Но, как оказалось, практически все руководства по его начальной настройке были откровенно устаревшими - включая, как ни странно, официальный мануал. Споткнуться приходилось уже в самом начале о «cat /proc/bus/usb/devices». Поговорив с гуглом серьёзным и доверительным тоном, я добился от него ссылки на действующий мануал , художественным переводом коего с дополнениями из иных источников сия статья и является.

Итак, начнём с установки самого apcupsd:

Sudo apt-get install apcupsd

Разумеется, вышесказанное справедливо для Debian и его производных, включая Ubuntu. Если в вашем дистрибутиве не используется apt-get - думаю, вы всё равно знаете, как поставить необходимый пакет. Надеюсь на это.

Теперь мы отредактируем конфигурационный файл apcupsd:

Sudo gedit /etc/apcupsd/apcupsd.conf

В данном случае нас интересуют всего три параметра:

  • UPSCABLE - указываем тип кабеля, которым наш UPS подключён к ПК. В комментариях указаны возможные типы - simple, smart, ether, usb. Нынешние домашние модели подключаются через USB - следовательно, достаточно дописать usb
  • UPSTYPE - тип подключённого UPS. В комментариях перечислены возможные типы и соответствующие им значения параметра DEVICE, наш же выбор - тип usb
  • DEVICE - закомментируем данную строку, поставив перед ней знак # - для USB-устройств она не нужна
Сохраняем изменённый конфигурационный файл, открываем следующий:

Sudo gedit /etc/default/apcupsd

Заменяем ISCONFIGURED=no на ISCONFIGURED=yes , сохраняем, закрываем. Отныне apcupsd будет знать, что мы не забыли его настроить.

Теперь достаточно запустить apcupsd:

Sudo /etc/init.d/apcupsd start

Если он уже был запущен - вместо start нам, разумеется, надо будет писать restart.

Всё, ваш ПК теперь связан с новеньким ИБП прочными узами дружбы.

А теперь немножко о том, что мы можем настроить в обширном /etc/apcupsd/apcupsd.conf:

  • ONBATTERYDELAY - время (в секундах), определяющее задержку между обнаружением сбоя электропитания и отсылкой события onbattery. По умолчанию - 6
  • BATTERYLEVEL - уровень заряда батареи (в процентах), при котором инициируется выключение компьютера. По умолчанию - 5
  • MINUTES - расчётное время остаточной работы (в минутах), при достижении которого инициируется выключение компьютера. По умолчанию - 3
  • TIMEOUT - параметр актуален для старых ИБП, неспособных определять свой уровень заряда. Задаёт время (в секундах) между сбоем электропитания и отключением компьютера. Для современного ИБП параметр стоит оставить на 0, но выставление иного значения может быть удобно для тестирования работы ИБП. Например, если выставить 30 и выдернуть шнур из розетки, уже через полминуты apcupsd продемонстрирует своё умение выключать компьютер
Выполнения одного из условий (BATTERYLEVEL, MINUTES или TIMEOUT) достаточно для выключения компьютера. Более тонкая настройка не описывается, ибо её необходимость для домашнего пользователя весьма сомнительна.

Долго сказка сказывается, да недолго дело делается: полагаю, описанные действия пользователь произведёт за пару минут. Надеюсь, данная статья поможет кому-нибудь подружить его ИБП APC с Linux, сэкономив время и не завязнув в устаревших мануалах.

Теги: apc, apcupsd, ups, ибп, linux

Конфигурационный файл располагается чаще всего в /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 .

Поведение этих функций зависит от установок в 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
Имя По умолчанию Место изменения Список изменений
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.
Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации .

Краткое разъяснение конфигурационных директив.

Если установить 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 сконфигурирован на использование большого объема памяти.

Внимание

Эта возможность потенциально опасна. Освобождение сегментов разделяемой памяти при получении критического сигнала может привести к непредсказуемому поведению.

Замечание :

Хотя некоторые ядра предоставляют возможность игнорировать некоторые сегменты разделяемой памяти при записи core-файла, эти реализации могут также игнорировать важные сегменты памяти, такие как Apache scoreboard.

apc.stat_ctime integer

Проверка по 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

Разрешает ленивую подгрузку классов.

10 years ago

The apc.rfc1867 example code above is a little fast and loose for those running in environments where APC RFC1867 may or may not be available. This is a little more expressive:

// if we have PHP and APC
$havePHP = (1 === version_compare (PHP_VERSION , "5.2.0" ) ? true : false );
$haveAPC = (extension_loaded ("apc" ) && 1 === version_compare (phpversion ("apc" ), "3.0.13" ) ? true : false );
if ($havePHP && $haveAPC ) {
// if APC and upload tracking is enabled
if (ini_get ("apc.enabled" ) && ini_get ("apc.rfc1867" )) {
// get the stats
$key = ini_get ("apc.rfc1867_prefix" ) . $_REQUEST [ "apcid" ];
$stats = apc_fetch ($key );
}
}

 

 

Это интересно: