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