Налаштування під час виконання
Поведінка цих функцій залежить від установок у 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), він використовуватиме лише один сегмент пам'яті, а навпаки, APC зібраний із підтримкою SHM (SysV Shared Memory), він використовуватиме кілька сегментів. MMAP не має максимального обмеження, на відміну від SHM, який обмежується /proc/sys/kernel/shmmax
. Зазвичай рекомендується використовувати MMAP, тому що він швидше виділяє пам'ять при перезавантаженні веб-сервера, що позначається на швидкості запуску сервера.
Опції конфігурації APCu
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
apc.enabled | "1" | INI_SYSTEM | |
apc.shm_segments | "1" | INI_SYSTEM | |
apc.shm_size | "32M" | INI_SYSTEM | |
apc.entries_hint | "4096" | INI_SYSTEM | |
apc.ttl | "0" | INI_SYSTEM | |
apc.gc_ttl | "3600" | INI_SYSTEM | |
apc.mmap_file_mask | NULL | INI_SYSTEM | |
apc.slam_defense | "1" | 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 |
Додаткова інформація та опис режимів INI_* дано у розділі «Місця встановлення параметрів конфігурації».
Коротке пояснення конфігураційних директив.
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
Записи кешу без явної вказівки TTL вважаються спливлими, якщо до них не зверталися протягом цієї кількості секунд. По суті це дозволяє видаляти такі записи опортуністично під час додавання кеша або перед повним видаленням. Зауважте, що оскільки видалення відбувається за обставинами, записи можуть бути доступні для читання, навіть якщо їх термін життя перевищує apc.ttl
секунд. Параметр не впливає на записи кешу, для яких явно задано TTL.
apc.gc_ttl
int
Кількість секунд, які запис може перебувати у списку збирача сміття. Це значення забезпечує безвідмовність у разі падіння сервера під час виконання закешованого файлу. Якщо файл, що виконується, був змінений, пам'ять, виділена під кешування його старої версії, не буде повернена до закінчення цього часу. Встановлення в нуль вимикає цей функціонал.
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
int
На дуже завантажених серверах, коли ви запускаєте веб-сервер, відразу багато процесів намагатимуться закешувати один і той же файл одночасно. Цією опцією задається ймовірність у відсотках того, що спроба одного конкретного процесу закешувати дані буде відхилена. Наприклад, якщо apc.slam_defense
установить равной75
, то це означає, що ймовірність закешувати файл, якого в кеші немає, дорівнюватиме 25% і ймовірність того, що в кешуванні буде відмовлено дорівнює 75%. Для заборони цього функціоналу встановіть цей параметр рівним
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.