2011-07-11 13 views
1

本番サーバーでAPC拡張を使用しています。このコードを追加しました:PHP APC - 運用サーバーでページを更新した後にキャッシュされたデータが失われる

$tmp = apc_fetch('pe_cache_test'); 
apc_store('pe_cache_test', ($tmp === false) ? 0 : $tmp + 1); 

...「pe_cache_test」は今後のリクエストでは空のままです。これは正常な動作ですか?複数のPHPインスタンスのため?要求ごとにキャッシュデータが失われた場合、APCはどのようにパフォーマンスを向上させることができますか?

この動作が意図されていない場合は、どこで問題の原因を見つけることができますか?

おかげで、 フィッシュボーン

編集2

私のホストプロバイダが私の仮定を確認しました。 FCGIがサーバーで使用されているため、メモリを共有できません。これは基本的な問題ではなく、多くのプロダクションサーバーでAPCを無駄にすることはありませんか?このような理由から私はなぜ誰も私の質問に答えることができないのだろうと思っています。回避策やヒントも大きな助けになるでしょう。

編集

設定とバージョン:

PHPバージョン:5.2.16

APC-config設定(私はHTTPDが使用するのphp.iniを使用したが、実行していることに注意してくださいCLIからのphpinfo()、したがって、「APCサポート」を「無効」に設定されている)


APC Support => disabled 
Version => 3.1.3p1 
MMAP Support => Enabled 
MMAP File Mask => 
Locking type => pthread mutex Locks 
Revision => $Revision: 286798 $ 
Build Date => Jan 4 2011 13:07:19 

Directive => Local Value => Master Value 
apc.cache_by_default => On => On 
apc.canonicalize => On => On 
apc.coredump_unmap => Off => Off 
apc.enable_cli => Off => Off 
apc.enabled => On => On 
apc.file_md5 => Off => Off 
apc.file_update_protection => 2 => 2 
apc.filters => no value => no value 
apc.gc_ttl => 3600 => 3600 
apc.include_once_override => Off => Off 
apc.lazy_classes => Off => Off 
apc.lazy_functions => Off => Off 
apc.max_file_size => 1M => 1M 
apc.mmap_file_mask => no value => no value 
apc.num_files_hint => 1000 => 1000 
apc.preload_path => no value => no value 
apc.report_autofilter => Off => Off 
apc.rfc1867 => Off => Off 
apc.rfc1867_freq => 0 => 0 
apc.rfc1867_name => APC_UPLOAD_PROGRESS => APC_UPLOAD_PROGRESS 
apc.rfc1867_prefix => upload_ => upload_ 
apc.rfc1867_ttl => 3600 => 3600 
apc.shm_segments => 1 => 1 
apc.shm_size => 30 => 30 
apc.stat => On => On 
apc.stat_ctime => Off => Off 
apc.ttl => 0 => 0 
apc.use_request_time => On => On 
apc.user_entries_hint => 4096 => 4096 
apc.user_ttl => 0 => 0 
apc.write_lock => On => On 

私のホストプロバイダーのみSWIのチェックボックスを提供管理されたサーバー上でWebサイトを実行しているため、APCのオン/オフを切り替える必要があります。

+0

ここにいくつかの部分は、apc:os、apc version、settigngsなどに関連する現在の設定です – gaRex

答えて

3

PHPがCGIとして設定されている場合は、APCを使用できません。この場合はmemcachedを使用してください。 APCは、モジュール(Apache mod_phpなど)として設定されたPHPの場合のみです

+0

あなたは正しいです。共有メモリを持つソリューションもありますが、少なくとも1つのphpプロセスがアクティブなままでないと、キャッシュされたデータが失われるため、動作しません。多くのプロバイダがfcgiを使用しているため、「apc」を使用することの一般的な推奨は、編集2で指摘されているように有用ではありません。 – fishbone

関連する問題