Оптимизировать кэширование APC - PullRequest
17 голосов
/ 26 августа 2010

вот ссылка на то, как работает мой APC: [удалено]

Как вы можете видеть, он заполняется довольно быстро, и мой Cache Full Count иногда превышает 1000 *

Мой сайтиспользует Wordpress.

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

1) Сбрасывается память APC «ИСПОЛЬЗУЕТСЯ» 2) Я получаю много фрагментов

Я пытался выделить больше памяти для APC (512 МБ), но иногда происходит сбой, кажется384 лучший.У меня также есть задание Cron, которое перезапускает apache, очищая все APC от фрагментов и использованной памяти каждые 4 часа.Опять же, мой apache падает, если APC работает в течение длительного периода времени, я думаю из-за наращивания фрагмента.

Должен ли я использовать apc.Filters и отфильтровать некоторые вещи, которые не должны кэшироваться?

Я действительно новичок в таких вещах, поэтому, если кто-то сможет объяснить с подробными инструкциями, большое спасибо !!!

Ответы [ 3 ]

41 голосов
/ 26 августа 2011

Я работаю системным администратором Linux, сервер WordPress запускает 5 различных установок WordPress.Если вы используете только один, я прокомментирую конфигурации для рассмотрения.

Версии APC / PHP, 3.1.9 / 5.3.7

Вот мой полный apc.conf,

apc.enabled=1
apc.shm_segments=1

; I would try 32M per WP install, go from there
apc.shm_size=128M

; Relative to approx cached PHP files,
apc.num_files_hint=512

; Relative to approx WP size W/ APC Object Cache Backend, 
apc.user_entries_hint=4096

apc.ttl=7200
apc.use_request_time=1
apc.user_ttl=7200
apc.gc_ttl=3600
apc.cache_by_default=1
apc.filters
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.file_update_protection=2
apc.enable_cli=0
apc.max_file_size=2M

;This should be used when you are finished with PHP file changes.
;As you must clear the APC cache to recompile already cached files.
;If you are still developing, set this to 1.
apc.stat=0

apc.stat_ctime=0
apc.canonicalize=1
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600

;This MUST be 0, WP can have errors otherwise!
apc.include_once_override=0

apc.lazy_classes=0
apc.lazy_functions=0
apc.coredump_unmap=0
apc.file_md5=0
apc.preload_path

@ Chris_O , ваша конфигурация не является оптимальной в нескольких аспектах.

1.apc.shm_segments = 3

Если вы используете современный дистрибутив Linux, ваш SHM должен быть достаточно большим.Если поиск слишком мал, то, как установить записи sysctl.conf, вы можете проверить следующим образом.

#Check Max Segment size
cat /proc/sys/kernel/shmmax

Исключение при работе на определенных BSD, или других Unix или управляемых хостах, которые вы не контролируетеНедостатки в том, что у вас нет смежного сегмента, читайте в деталях APC.

2.apc.enable_cli = 1

BAD BAD BAD, это только для отладки!Каждый раз, когда вы запускаете php-cli, он очищает кэш APC.

3.apc.max_file_size = 10M

Ненужно и смешно!Если бы у вас был такой большой файл, он бы съел 1/3 этого маленького 32M SHM.Даже если вы укажете 3, они не просто действуют как один большой сегмент из трех частей.Несмотря на это, в WP нет даже отдельных файлов PHP, даже близких к этому размеру.

'надеюсь, я помог людям с их apc.conf.

10 голосов
/ 19 сентября 2010

APC ttl должен позаботиться о создании фрагмента. Я обычно устанавливаю его на 7200. Я запускаю его на небольшом VPS с WordPress, и мои настройки:

apc.enabled=1
apc.shm_segments=3
apc.shm_size=32
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=2048
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.max_file_size=10M

Вы также получите гораздо больше пользы от этого, используя встроенный в WordPress кеш объектов, и Марк Джакит написал действительно хороший плагин , который также должен помочь с некоторыми проблемами фрагментации при сохранении или редактировании. сообщение.

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

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

Сначала ознакомьтесь с документацией: http://php.net/manual/en/apc.configuration.php

...