Настройка во время выполнения
Поведение этих функций зависит от установок в php.ini.
Хотя настроек APCu по умолчанию вполне достаточно для большинства задач, но для серьезных проектов необходимо внимательно изучить следующие настройки.
При настройке APCu необходимо определиться, сколько пямяти
предоставить в распоряжение APCu.
Директива ini-файла, ответственная за эту настройку - apc.shm_size
.
Внимательно прочитайте нижеследующий раздел.
Как только сервер запущен, скрипт apc.php
, поставляемый с
этим модулем, должен быть скопирован в "docroot" и права на него должны
позволять запустить его через браузер. Этот скрипт предоставляет детальную информацию
по работе APCu. Если в PHP поддерживается GD, то этот скрипт также будет показывать
полезные графики. Конечно же первое, что будет интересно, это то, кеширует
ли APC что-нибудь. Если APC работает, то значение Cache full count
(слева) будет показывать, сколько раз кеш был полностью заполнен и был
вынужден принудительно удалить записи, к которым не обращались последние
apc.ttl
секунд. Чем меньше это число - тем лучше сконфигурирован кеш.
Если это число постоянно растет, значит APCu приходится постоянно очищать старые
записи и значит теряется весь смысл кеширования. Самый лучший способ
уменьшить это число - это добавить APCu памяти. Если сделать этого нельзя,
то надо перенастроить apc.filters
, чтобы ограничить набор
кешируемых скриптов.
Если APCu собран с поддержкой mmap (Memory Mapping), он будет использовать
всего один сегмент памяти, если же наоборот, APC собран с поддержкой SHM (SysV Shared
Memory), он будет использовать несколько сегментов. MMAP не имеет максимального
ограничения, в отличие от SHM, который ограничивается
/proc/sys/kernel/shmmax
. Обычно рекомендуется использовать MMAP,
потому что он гораздо быстрее выделяет память при перезагрузке веб-сервера, что
сказывается на скорости запуска сервера.
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
apc.enabled | "1" | PHP_INI_SYSTEM | |
apc.shm_segments | "1" | PHP_INI_SYSTEM | |
apc.shm_size | "32M" | PHP_INI_SYSTEM | |
apc.entries_hint | "4096" | PHP_INI_SYSTEM | |
apc.ttl | "0" | PHP_INI_SYSTEM | |
apc.gc_ttl | "3600" | PHP_INI_SYSTEM | |
apc.mmap_file_mask | NULL | PHP_INI_SYSTEM | |
apc.slam_defense | "1" | PHP_INI_SYSTEM | |
apc.enable_cli | "0" | PHP_INI_SYSTEM | |
apc.use_request_time | "1" | PHP_INI_ALL | |
apc.serializer | "default" | PHP_INI_SYSTEM | |
apc.coredump_unmap | "0" | PHP_INI_SYSTEM | |
apc.preload_path | NULL | PHP_INI_SYSTEM |
Краткое разъяснение конфигурационных директив.
-
apc.enabled
bool -
Если установить
apc.enabled
равным 0, то APCu не будет запущен. Это полезно, когда APCu статически включен в PHP и нет других вариантов, для запрещения его использования. Если APC собран как DSO, можно просто закомментировать строкуextension
вphp.ini
. -
apc.shm_segments
int -
Количество сегментов разделяемой памяти выделенной под кеш. Если APC использовал всю доступную разделяемую память, а
apc.shm_size
таким большим, как позволяет система, увеличение этого параметра может помочь. -
apc.shm_size
string -
Размер сегмента разделяемой памяти, заданный в короткой нотации (смотрите этот FAQ). По умолчанию, некоторые системы (включая большинство вариантов BSD) ограничивают это значение крайне малым значением.
-
apc.entries_hint
int -
Это подсказка о количестве уникальных пользовательских переменных, которые надо кешировать. Установите равным нулю или вообще не указывайте, если не уверены.
-
apc.ttl
int -
Количество секунд, которые запись может лежать в кеше без обращения к ней, прежде чем будет разрешено ее заменить на другую. Установка этого параметра равного нулю может привести к тому, что все место будет забито и новые записи не смогут попасть в кеш. В этом случае, если параметр равен 0, кеш будет полностью очищен. Если же ttl будет больше нуля, то APCu постарается очистить устаревшие записи.
-
apc.gc_ttl
int -
Количество секунд, которые запись может находиться в списке сборщика мусора. Это значение обеспечивает безотказность в случае падения сервера в момент исполнения закешированного файла. Если исполняемый файл был изменен, память, выделенная под кеширование его старой версии, не будет возвращена до истечения этого времени. Установка в ноль отключает этот функционал.
-
apc.mmap_file_mask
string -
Если собран с поддержкой MMAP, с помощью опции
--enable-mmap
, этот параметр должен содержать файловую маску типа mktemp-style для передачи в модуль MMAP, чтобы определить, будет ли MMAP использовать файловую систему или разделяемую память. Для файловой системы задайте опцию как/tmp/apc.XXXXXX
(ровно 6X
). Для использования shm_open/mmap в стиле POSIX, добавьте.shm
в любом месте маски, например/apc.shm.XXXXXX
Вы также можете установить его как/dev/zero
для использования интерфейса ядра/dev/zero
для анонимной памяти mmap. Если не задано, то будет принудительно использоваться анонимный mmap. -
apc.slam_defense
int -
На очень загруженных серверах, когда вы запускаете веб-сервер, сразу множество процессов будут пытаться закешировать один и тот же файл одновременно. Этой опцией задается вероятность, в процентах, того, что попытка одного конкретного процесса закешировать данные будет отклонена. Например, если
apc.slam_defense
установить равной75
, то это означает, что вероятность закешировать файл, которого в кеше нет, будет равна 25% и вероятность того, что в кешировании будет отказано равна 75%. Для запрета данного функционала установите этот параметр равным0
. -
apc.enable_cli
int -
Больше для тестирования и отладки. Эта настройка включает APCu для CLI версии PHP. При обычной работе, запускать APCu, который будет создавать, наполнять и уничтожать кеш при каждом запуске сценария в консоли, будет далеко не лучшей идеей. Но в целях тестирования и отладки, можно легко включить APCu для CLI.
-
apc.serializer
string -
Указывает APC использовать сторонний сериализатор.
-
apc.coredump_unmap
bool -
Разрешает APC перехватывать сигналы, такие как SIGSEGV, который записывает coredump, когда подан. Когда эти сигналы будут получены, APC попытается освободить всю разделяемую память, чтобы не включать ее в coredump. Эта настройка может увеличить стабильность системы, когда критический сигнал был получен, а APC сконфигурирован на использование большого объема памяти.
ВниманиеЭта возможность потенциально опасна. Освобождение сегментов разделяемой памяти при получении критического сигнала может привести к непредсказуемому поведению.
Замечание:
Хотя некоторые ядра предоставляют возможность игнорировать некоторые сегменты разделяемой памяти при записи core-файла, эти реализации могут также игнорировать важные сегменты памяти, такие как Apache scoreboard.
-
apc.preload_path
string -
Опционально. Задает путь, который используется APC для загрузки кешированных данных во время запуска.
-
apc.use_request_time
bool -
Использовать время старта запроса SAPI для TTL.