APC将不同目录中同名的不同文件缓存为同一文件

APC将不同目录中同名的不同文件缓存为同一文件

我的 APC 配置有问题。APC 似乎将同名文件缓存在不同的目录中,就好像它们是同一个文件一样。

目录结构如下:

src/
  development/
  edge/
  stable/
    tag-20101101/
    tag-20101115/
    ...

代码位于 development、edge 和每个标签目录中。似乎发生的情况是,当 APC 缓存例如 src/stable/foo/bar/quux.php 时,它会对 src/development/foo/bar/quux.php 使用相同的缓存,即使它们不是同一个文件。某些文件可能使用相对路径包含,尽管我尚未确定相对包含的文件与 APC 缓存问题之间是否存在任何联系。

我的APC配置(由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                    3600
apc.include_once_override     0
apc.lazy_classes              0
apc.lazy_functions            0
apc.max_file_size             5M
apc.mmap_file_mask            /tmp/apc.tKRzKb
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.shm_segments              1
apc.shm_size                  128
apc.stat                      1
apc.stat_ctime                0
apc.ttl                       0
apc.use_request_time          1
apc.user_entries_hint         4096
apc.user_ttl                  0
apc.write_lock                1

我使用的是 PHP 5.3.2 和 APC 3.1.3p1,带有 PHP-FPM。服务器是虚拟化的 RHEL 5.4,分配了 4GB RAM,在另一台 RHEL 5.4 服务器上运行,该服务器有 32 GB RAM 和 12 个 AMD Opteron 2.4 GHz CPU 核心。

有人知道是什么原因造成的吗,或者我可以做些什么来解决它?

答案1

根据文档,在无统计模式下,路径可以被规范化。

http://php.net/manual/en/apc.configuration.php

我的解释是,如果您在上述配置中将 apc.stat 更改为 0,它可能会起作用。

//约翰

答案2

事实证明,问题不是由 APC 引起的,而是因为托管代码的 NFS3 NAS 被挂载为 NFS4。这导致了文件系统缓存问题。使用 APC 在一定程度上掩盖了实际问题。

不过还是感谢您抽出时间。

相关内容