Проблема фрагментации кеша APC - PullRequest
4 голосов
/ 06 октября 2010

Я использую 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 этих файлов с помощью apc.filters?Есть ли решения проблемы?

Ответы [ 2 ]

7 голосов
/ 17 октября 2010

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

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

Проверьте документацию для других вариантов: http://php.net/manual/en/apc.configuration.php

2 голосов
/ 07 июля 2011

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

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

...