2012-04-13 2 views
1

У нас есть сервер с Magento 1.4.2 CE, установлен APC 3.1.9, и Magento настроен на использование его в качестве бэкэнд-кеша.Magento 1.4.2 + APC: Очистка кеша не влияет на изменение настроек

Мы испытали странное поведение с кешированием. Каждое изменение, которое мы делаем в бэкэнд, не отображается до тех пор, пока не будет перезапущен apache2/кеш-код операции APC. Это включает, например, изменение приветственного сообщения или активация/деактивация Google Analytics.

Вопрос: Почему APC кэширует полные страницы? Мы не хотим этого поведения, и оно, похоже, не является стандартным. Для каждого небольшого изменения в бэкэнд нам нужно очистить кеш-код операции. Очистка Magento Cache не помогает.

Для полноты, вот наш /etc/php5/conf.d/apc.ini:

extension=/usr/lib/php5/20090626/apc.so 
apc.enabled=1 
apc.file_update_protection=2 
apc.optimization=0 
apc.shm_size=128M 
apc.include_once_override=0 
apc.shm_segments=1 
apc.gc_ttl=7200 
apc.ttl=7200 
apc.num_files_hint=1024 
apc.enable_cli=0 

Включение/Отключение Google Analytics будет также иметь никакого эффекта после того, как 7200s TTL. Возможно, потому что в настоящий момент наш кеш не работает полностью. 40% его мощности используется с коэффициентом попадания 98%.

Это полный выход из настройки apc.php:

apc.cache_by_default 1 
apc.canonicalize  1 
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   7200 
apc.include_once_override 0 
apc.lazy_classes  0 
apc.lazy_functions  0 
apc.max_file_size  1M 
apc.mmap_file_mask 
apc.num_files_hint  1024 
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.serializer  default 
apc.shm_segments  1 
apc.shm_size  128M 
apc.slam_defense  1 
apc.stat   1 
apc.stat_ctime  0 
apc.ttl   7200 
apc.use_request_time 1 
apc.user_entries_hint 4096 
apc.user_ttl  0 
apc.write_lock  1 
+0

Я получил подсказку, чтобы отключить кеш-память Magento, так как она оказывает меньшее влияние на производительность, чем сама кэширование кода APC. Дезактивация кеша в local.xml и очистка var/cache действительно помогли. В магазинах почти так же быстро, как раньше, но ошибка, которую я должен был очистить кеш-код операции при каждом изменении одного параметра, исчез. – SebiF

ответ

1

APC держит как терминал и на основе кэш веб. Поскольку вы можете очистить только «веб-кешированные» хиты из веб-URL-адреса, а не из командной строки, вот почему после перезапуска apache очищает APC Web-кеш. Скорее всего, вы захотите настроить сценарий для очистки кеша с похожим сценарием, чтобы вы могли просто вызвать его из CLI или скрипта.

echo "Clearing APC web cache\n"; 
system('wget --spider --quiet http://localhost/clear_apc_cache.php'); 

echo "Clearing APC command line user cache\n"; 
apc_clear_cache('user'); 

echo "Clearing APC command line opcode cache\n"; 
apc_clear_cache(); 

Очевидно, что вам нужно создать clear_apc_cache.php соответствующий файл с тем же два метода внутреннего APC вызывает в нем, apc_clear_cache(); и apc_clear_cache('user');

Кроме того, я бы настроить локальную область, чтобы просмотреть кэш APC а также:

http://www.electrictoolbox.com/apc-php-cache-information/

+0

Ну, дело не в исправлении странного поведения Magento, тем не менее, здорово не перезапускать веб-сервер каждый раз. Так что это принято. Btw. у нас уже есть работа с кешем, см. ссылку на apc.php в тексте. – SebiF

0

Вы также можете установить apc.stat к нулю. (apc.stat = 0) в вашем файле PHP.ini.

Если он установлен в 1, он не ищет обновления файлов, что дает лучшую производительность, но требует перезапуска Apache после обновления. При установке на 0 он будет проверять обновления файлов и добавлять их в кеш (т. Е. Ваши обновления будут видны на сайте).

+1

Прошу прощения, что это неправильно. Он работает совершенно противоположно. apc.stat = 1 позволит APC проверять измененные файлы, а apc.stat = 0 отключает проверку на изменение файлов. Настройка, выбранная в конфиге в вопросе, в порядке. См. [Руководство по php] (http://www.php.net/manual/de/apc.configuration.php#ini.apc.stat) – SebiF