2
  • APCバージョン:3.1.9。
  • PHPバージョン:5.2.17
  • Litespeedを使用しています
  • デフォルトのPHP:5
  • PHP4 SAPI:cgi
  • PHP5 SAPI:dso
  • SUEXEC:有効

2つのファイルを作成します。最初のファイル、apc varを設定します:

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

2番目のファイル、apc varを取得してみてください:

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

最初のファイルにアクセスしましたが、すべて問題ありません。2番目のファイルを開き、数回更新します。通常(ほぼ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
4

1 に答える 1

2

私の推測では、LitespeedはFastCGIでPHPを実行しています。つまり、いくつかの子プロセスを生成し、それらの間でリクエストをディスパッチします。問題は、おそらくAPCがデータを(共有メモリではなく)ヒープメモリに格納するため、すべてのFastCGIインスタンスが独自のAPCデータを持っていることです。1つのインスタンスのデータは、他のインスタンスでは表示されません。インスタンス#1でデータを設定しますが、フェッチ要求はインスタンス#2、インスタンス#3 ...に送られ、FALSEになります。インスタンス#1にヒットすると、保存された値を受け取ります。

編集:APCモジュールを--disable-apc-mmap(mmapサポートを無効にし、代わりにIPC shmを使用して)コンパイルすると、問題が修正されるはずです。

于 2012-04-27T14:47:49.097 に答える