2012-04-27 2 views
2
  • Версия APC: 3.1.9.
  • PHP Версия: 5.2.17
  • я использую Litespeed
  • DEFAULT PHP: 5
  • PHP4 SAPI: CGI
  • PHP5 SAPI: DSO
  • Suexec: включен

создать 2 файла. Первый файл, установите АРС вар:APC: apc_fetch возвращает false часто, но иногда успех

<?php 
$bar = 'BAR'; 
apc_store('foo_test', $bar); 
echo 'stored'; 
?> 

Второй файл, попытайтесь получить APc вар:

<?php 
var_dump(apc_fetch('foo_test')); 
?> 

Я посетил первый файл, все в порядке. Открываю второй файл, я обновляюсь несколько раз, обычно (почти 90%), он возвращает false. И редко возвращает правильный ответ.

Вот моя настройка APC.

apc.cache_by_default 1 
apc.canonicalize 1 
apc.coredump_unmap 0 
apc.enable_cli 1 
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 0 
apc.lazy_functions 0 
apc.max_file_size 20M 
apc.mmap_file_mask 
apc.num_files_hint 1000 
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 512M 
apc.slam_defense 1 
apc.stat 0 
apc.stat_ctime 0 
apc.ttl 0 
apc.use_request_time 1 
apc.user_entries_hint 4096 
apc.user_ttl 7200 
apc.write_lock 1 
+0

Если вы попытаетесь вручную установить ttl, он будет вести себя одинаково? 'apc_store ('foo', $ bar, 1800);' – arma

ответ

2

Я предполагаю, что Litespeed работает с PHP с FastCGI. Таким образом, он порождает некоторые дочерние процессы, а затем отправляет запросы между ними. Проблема в том, что возможно APC хранит данные в памяти кучи (не в общей памяти), поэтому каждый экземпляр FastCGI имеет свои собственные данные APC. Данные в одном экземпляре не будут видны в других случаях. Вы устанавливаете данные в экземпляре # 1, но затем ваш запрос на выборку переходит к экземпляру # 2, экземпляру №3 ... и вы получаете FALSE. Когда вы нажмете экземпляр # 1, вы получите сохраненное значение.

Редактировать: Компиляция модуля APC с помощью --disable-apc-mmap (отключите поддержку MMAP и используйте вместо этого IPC shm).

+0

Спасибо, я попробую. – Sempa

+0

@strkol вы правы, APC не делится своим кешем между дочерними процессами - это то, где использование memcache было бы лучшим вариантом , – damianb

+0

После проверки я использую SuPHP, а не FastCGI. Должен ли я использовать '--disable-apc-mmap' тоже? – Sempa

Смежные вопросы