Назад | Перейти на главную страницу

Фрагментация кэша сервера APC

Я запускаю сайт Wordpress с APC и W3TC на CentOS 5.5, который получает около 10000 просмотров страниц в день (включая ajax и WP-Admin). Сервер представляет собой VPS низкого уровня с максимальным объемом оперативной памяти 376 МБ.

Недавно я начал получать несколько сбоев сервера, которые теперь могу отнести к APC (я отключил его на некоторое время, и сбои прекратились).

После переустановки и просмотра графиков APC я вижу, что мы получаем большую фрагментацию всего через несколько секунд после запуска PHP-FPM. В некоторых случаях 100% фрагментация может произойти за несколько минут.

Текущий размер кэша составляет 40 МБ, и я немного не решаюсь увеличить его из-за ограничения памяти на сервере.

Я установил ttl для кеша на 2 часа, но я боюсь, что это может быть слишком долго, учитывая количество происходящей фрагментации, однако, если я установлю его слишком коротким, это приведет к нарушению всей цели кеша.

Я также заметил, что при установке userttl выше 0 я получаю множество ошибок, когда вызываются определенные функции require / include / require_once / include_once.

Любая помощь будет принята с благодарностью.

Если вы используете APC 3.0.6, как указано в инструкциях по установке W3 Total Cache, вы, вероятно, получите potential cache slam avoided errors которые очень быстро заполняют ваши журналы.

Удалите APC и выполните повторную сборку, используя версию 3.1.7 (текущая стабильная версия 3.1.9), которая исправляет ошибку захлопывания кеша и множество других вопросов.

Вы также получите лучшие результаты, запустив последнюю версию PHP 5.3.6. Каждая версия будет лучше взаимодействовать с APC (они будут полностью интегрированы, когда выйдет PHP 6).

Также взгляните на свой файл конфигурации и настройку apc.slam_defense и увеличьте ее до 30 или 40.

Для реального повышения производительности установите apc.stat на 0, и это удалит процесс проверки наличия новой версии файла. Если вы внесете много изменений в свой сайт, они не будут обновляться до истечения срока действия кеша. (Мои пользователи расстраиваются, поэтому я должен оставить его равным 1)

установка apc.slam_defense на 75 будет означать, что существует вероятность 75%, что процесс не будет кэшировать некэшированный файл. Таким образом, чем выше значение параметра, тем выше защита от захлопывания кеша. Установка этого значения на 0 отключает эту функцию.

Понизьте apc.user_ttl, который использует W3 Total Cache, и это более динамичный материал. Держите apc.ttl на высоком уровне, потому что это будут ваши основные файлы WordPress и файлы темы, которые вы на самом деле не меняете.

Я предполагаю, что ваш объект настройки и кеш db в W3 для APC. Для вашего размера сервера я бы увеличил кеширование страниц на диск. Также помните, что вы можете установить ttl для динамического материала в W3.

Вот мой, работающий с довольно большим WordPress Multisite на выделенном сервере с 12G Ram. Не бойтесь увеличивать размер кеша даже при ограниченной памяти. При необходимости вы всегда можете вернуться назад. Мой установлен на 512M, но никогда не использует больше 120M.

; configuration for php apc module
extension = apc.so
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 512M
apc.optimization = 0
apc.num_files_hint = 2700
apc.user_entries_hint = 2700
apc.ttl = 7200
apc.user_ttl = 3600
apc.gc_ttl = 600
apc.cache_by_default = 1
apc.slam_defense = 1
apc.use_request_time = 1
apc.mmap_file_mask = /dev/zero
apc.file_update_protection = 2
apc.enable_cli = 0
apc.max_file_size = 2M
apc.stat = 1
apc.write_lock = 1
apc.report_autofilter = 0
apc.include_once_override = 0
apc.rfc1867 = 0
apc.rfc1867_prefix = "upload_"
apc.rfc1867_name = "APC_UPLOAD_PROGRESS"
apc.rfc1867_freq = 0
apc.localcache = 1
apc.localcache.size = 1350
apc.coredump_unmap = 0
apc.stat_ctime = 0

У вас высокий показатель «Кэш заполнен»? Похоже, вам нужно увеличить размер apc.shm_size в вашем php.ini, чтобы уменьшить количество кешированных элементов, удаляемых из кеша. Тем не менее досадно, что это вызывает проблемы со стабильностью ...