APC文件缓存无法正常工作,但用户缓存很好

时间:2011-09-07 17:14:20

标签: php linux apache caching apc

摘要:我安装了PHP(5.3.8)作为Apache模块,并通过PECL安装了APC。用户缓存工作正常,但文件缓存不起作用(我确实将apc.cache_by_default设置为1,这不是问题)

详情: 我刚刚获得了一个VPS(使用cPanel / WHM)来测试我使用apc文件缓存和用户缓存在我的应用程序中可以获得的收益。

所以我将PHP 5.3编译为DSO(apache模块)。

然后通过PECL通过SSH安装APC。 (首先我尝试使用WHM模块安装程序,它也遇到了同样的问题,所以我通过ssh尝试了它)

一切似乎都很好,phpinfo显示apc已加载并启用。

然后我检查了apc.php。一切似乎都好。

但是当我开始测试我的php应用程序时,apc中的文件缓存信息状态为:

Cached Files    0 ( 0.0 Bytes)  
Hits    1  
Misses  0  
Request Rate (hits, misses) 0.00 cache requests/second  
Hit Rate    0.00 cache requests/second  
Miss Rate   0.00 cache requests/second  
Insert Rate 0.00 cache requests/second  
Cache full count    0  

这意味着没有缓存PHP文件,即使我浏览过10多个包含多个包含的PHP文件。所以一定有一些缓存文件。

但是用户缓存运行正常。

User Cache Information  
Cached Variables    0 ( 0.0 Bytes)  
Hits    1000  
Misses  1000  
Request Rate (hits, misses) 0.84 cache requests/second  
Hit Rate    0.42 cache requests/second  
Miss Rate   0.42 cache requests/second   
Insert Rate 0.84 cache requests/second  
Cache full count    0

上述用户缓存输出来自APC缓存测试脚本,该脚本尝试检索并存储1000个条目并给我时间。一种简单的基准。

任何人都可以帮助我。
即使apc.cache_by_default = 1,也没有缓存php文件。

这是我的apc配置

Runtime Settings  
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   1M  
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    32M  
apc.slam_defense    1  
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文件也不到20KB,因此,apc.max_file_size = 1M不是原因。

我尝试过没有运气的事情。

  1. 使用'apc_compile_file'强制某些文件进入操作码缓存而没有运气。
  2. 重新安装启用了调试的APC,但error_log
  3. 中没有显示任何内容
  4. 将mmap_file_mask设置为/ dev / zero和/tmp/apc.xxxxxx,我还将/ tmp权限设置为777无效
  5. 设置apc.enable_cli = 1并从cli
  6. 运行脚本
  7. 设置apc.max_file_size = 5M(以防万一)
  8. 在WHM中将php处理程序从dso切换到FastCGI(然后将其切换回dso,因为它没有解决问题)
  9. 甚至尝试重新启动容器
  10. 任何人都有任何线索。

    注意:我在serverfault.com上发布了这个问题,但没有得到太多的观点或答案所以我在这里发帖(因为stackoverflow似乎更活跃,我只有1一个月来测试我的VPS并查看它是否对共享有任何用处

1 个答案:

答案 0 :(得分:2)

似乎问题出在SourceGuardian上 从php.ini中注释掉extension =“ixed.5.3.lin”后,文件缓存现在正常工作。

我的托管服务提供商的支持人员发现了这一点,所以赞不绝口。我好几天都没有找到这个问题。

思想应该发布答案以防其他人绊倒这个问题。