При настройке APC в качестве кеша опкодов для PHP есть параметр конфигурации, называемый apc.mmap_file_mask. Из того, что я прочитал, вы можете настроить его тремя способами, но я не совсем понимаю значение каждого из них.
Источник: http://php.net/manual/en/apc.configuration.php#ini.apc.mmap-file-mask
Может ли кто-нибудь прокомментировать это и то, что они порекомендовали бы? Я предполагаю, что будут последствия использования памяти и производительности и, возможно, безопасности, но я не знаю, так ли это? Из прочтения, которое я закончил, я предполагаю, что №2 и №3 быстрее, но я думал, что APC уже использует разделяемую память как есть (как установлено apc.shm_size), поэтому я не понимаю.
/tmp/apc.XXXXXX -> Эта маска файла mmap представляет собой обычную файловую систему на основе mmap и использует mkstemp для создания уникального временного файла, который является mmap'd. 6 'X заменяются уникальной строкой, чтобы сделать имя файла уникальным. Это просто запись данных в файл в файловой системе.
/tmp/apc.shm.XXXXXX -> Обратите внимание, что it_must_ быть только /apc.shm.XXXXXX в системах Linux. Отличие от обычного mmap с файловой поддержкой заключается в том, что этот механизм создает временный файл с помощью вызова mktemp () и выполняет вызов shm_open (), который создает и открывает новый или открывает существующий объект общей памяти POSIX. Объект разделяемой памяти POSIX фактически является дескриптором, который может использоваться несвязанными процессами для отображения одной и той же области разделяемой памяти. Я не пробовал это раньше, но думаю, что у него может быть как минимум 3 крестика (так что apc.shml.XXX тоже должен работать).
/ dev / zero -> mmap'ing /dev/zero
является анонимным отображением памяти, что означает, что это объект памяти, не имеющий связанного файла, и все содержимое инициализировано нулем. Если вы не укажете mmap_file_mask, APC будет использовать анонимную карту (с флагами MAP_SHARED и MAP_ANON). Таким образом, указав /dev/zero
и отсутствие указания mmap_file_mask эквивалентны в том смысле, что они оба являются анонимной картой. Исторически сложилось так, что MAP_SHARED и MAP_ANON вместе в linux не поддерживались до версии ядра 2.4.
С точки зрения производительности, 3 будет наилучшим образом, поскольку файловая поддержка mmap'а имеет значительно больший объем дискового ввода-вывода. Итак, 3 должен быть самым быстрым, поскольку он не имеет резервного файла и является частью самой памяти, затем 2 и 1, наконец. Однако это только теория, и практические тесты в различных конфигурациях могут подтвердить реальность. Однако недостатком анонимного сопоставления (и сопоставления с общей памятью) является то, что память mmap не сохраняется между выполнениями приложения, что приводит к потере кеша при перезапуске.