Поведение этих функций зависит от установок в 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
boolean
Если установить apc.enabled равным 0, то APCu не будет запущен. Это полезно, когда APCu статически включен в PHP и нет других вариантов, для запрещения его использования. Если APC собран как DSO, можно просто закомментировать строку extension в php.ini.
apc.shm_segments
integer
Количество сегментов разделяемой памяти выделенной под кеш. Если APC использовал всю доступную разделяемую память, а apc.shm_size таким большим, как позволяет система, увеличение этого параметра может помочь.
apc.shm_size
string
Размер сегмента разделяемой памяти, заданный в короткой нотации (смотрите этот FAQ). По умолчанию, некоторые системы (включая большинство вариантов BSD) ограничивают это значение крайне малым значением.
apc.entries_hint
integer
Это подсказка о количестве уникальных пользовательских переменных, которые надо кешировать. Установите равным нулю или вообще не указывайте, если не уверены.
apc.ttl
integer
Количество секунд, которые запись может лежать в кеше без обращения к ней, прежде чем будет разрешено ее заменить на другую. Установка этого параметра равного нулю может привести к тому, что все место будет забито и новые записи не смогут попасть в кеш. В этом случае, если параметр равен 0, кеш будет полностью очищен. Если же ttl будет больше нуля, то APCu постарается очистить устаревшие записи.
apc.gc_ttl
integer
Количество секунд, которые запись может находиться в списке сборщика мусора. Это значение обеспечивает безотказность в случае падения сервера в момент исполнения закешированного файла. Если исполняемый файл был изменен, память, выделенная под кеширование его старой версии, не будет возвращена до истечения этого времени. Установка в ноль отключает этот функционал.
apc.mmap_file_mask
string
Если собран с поддержкой MMAP, с помощью опции --enable-mmap, этот параметр должен содержать файловую маску типа mktemp-style для передачи в модуль MMAP, чтобы определить, будет ли MMAP использовать файловую систему или разделяемую память. Для файловой системы задайте опцию как /tmp/apc.XXXXXX (ровно 6 X). Для использования shm_open/mmap в стиле POSIX, добавьте .shm в любом месте маски, например /apc.shm.XXXXXX Вы также можете установить его как /dev/zero для использования интерфейса ядра /dev/zero для анонимной памяти mmap. Если не задано, то будет принудительно использоваться анонимный mmap.
apc.slam_defense
integer
На очень загруженных серверах, когда вы запускаете веб-сервер, сразу множество процессов будут пытаться закешировать один и тот же файл одновременно. Этой опцией задается вероятность, в процентах, того, что попытка одного конкретного процесса закешировать данные будет отклонена. Например, если apc.slam_defense установить равной 75, то это означает, что вероятность закешировать файл, которого в кеше нет, будет равна 25% и вероятность того, что в кешировании будет отказано равна 75%. Для запрета данного функционала установите этот параметр равным 0.
apc.enable_cli
integer
Больше для тестирования и отладки. Эта настройка включает APCu для CLI версии PHP. При обычной работе, запускать APCu, который будет создавать, наполнять и уничтожать кеш при каждом запуске сценария в консоли, будет далеко не лучшей идеей. Но в целях тестирования и отладки, можно легко включить APCu для CLI.
apc.serializer
string
Указывает APC использовать сторонний сериализатор.
apc.coredump_unmap
boolean
Разрешает APC перехватывать сигналы, такие как SIGSEGV, который записывает coredump, когда подан. Когда эти сигналы будут получены, APC попытается освободить всю разделяемую память, чтобы не включать ее в coredump. Эта настройка может увеличить стабильность системы, когда критический сигнал был получен, а APC сконфигурирован на использование большого объема памяти.
Эта возможность потенциально опасна. Освобождение сегментов разделяемой памяти при получении критического сигнала может привести к непредсказуемому поведению.
Замечание:
Хотя некоторые ядра предоставляют возможность игнорировать некоторые сегменты разделяемой памяти при записи core-файла, эти реализации могут также игнорировать важные сегменты памяти, такие как Apache scoreboard.
apc.preload_path
string
Опционально. Задает путь, который используется APC для загрузки кешированных данных во время запуска.
apc.use_request_time
bool
Использовать время старта запроса SAPI для TTL.