Проблема фрагментации кеша APC

Я запускаю APC (php cache) на среднем веб-сайте (13 000 посещений в день) на сервере CentOS 5 с php 5.3.3 с APC 3.1.4 с 4 ГБ ОЗУ. В последние недели я испытываю много ошибок « unable to allocate memory for pool » в журналах, и часто сайт идет вниз.

Я думаю, проблема в APC. Из статистики я вижу, что кеш заполнен через час или два, а фрагментация всегда переходит на 100%. Это мои настройки конфигурации apc.ini:

 apc.cache_by_default 1 apc.canonicalize 0 apc.coredump_unmap 0 apc.enable_cli 0 apc.enabled 1 apc.file_md5 0 apc.file_update_protection 2 apc.filters apc.gc_ttl 3600 apc.include_once_override 0 apc.lazy_classes 00 apc.lazy_functions 0 apc.max_file_size 1M apc.mmap_file_mask /dev/zero apc.num_files_hint 0 apc.preload_path apc.report_autofilter 0 apc.rfc1867 0 apc.rfc1867_freq 0 apc.rfc1867_name APC_UPLOAD_PROGRESS apc.rfc1867_prefix upload_ apc.rfc1867_ttl 3600 apc.shm_segments 1 apc.shm_size 512M apc.slam_defense 1 apc.stat 1 apc.stat_ctime 0 apc.ttl 7200 apc.use_request_time 1 apc.user_entries_hint 0 apc.user_ttl 7200 apc.write_lock 1 

Из статистики APC я вижу, что количество кэшированных файлов очень велико (40 000), и это связано с множеством файлов кеша phpbb и mediawiki. Должен ли я apc.filters APC кэшировать эти файлы с помощью apc.filters ? Есть ли решения проблемы?

Вы действительно должны установить apc.stat = 0 на своем производственном сервере, и это предотвратит фактическое переключение APC в IO, чтобы проверить, был ли файл изменен.

также установите apc.slam_defense = 0, поскольку он устарел

Ознакомьтесь с документацией по другим параметрам: http://php.net/manual/en/apc.configuration.php

Я думаю, вы должны установить apc.mmap_file_mask = /tmp/apc-yourusernamehere.XXXXXX для файлового файла mmap; сделать маску файла уникальной, добавив вашу уникальную строку; XXXXXX (ровно 6 X) должен оставаться, чтобы позволить APC добавлять случайную строку ИЛИ устанавливать / dev / zero для анонимного mmap, если вы можете сэкономить память.

Я вижу, что вы используете / dev / zero, который занимает память без необходимости.