php - APC 文件缓存不工作,但用户缓存正常

标签 php linux apache caching apc

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

详细信息: 我刚刚得到一个 VPS(带有 cPanel/WHM)来测试使用 apc 文件缓存和用户缓存可以在我的应用程序中获得什么 yield 。

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

然后通过 SSH 通过 PECL 安装 APC。 (我先用WHM Module installer试了一下,也有同样的问题,所以我通过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,但错误日志中没有显示任何内容
  3. 将 mmap_file_mask 设置为/dev/zero 和/tmp/apc.xxxxxx,我也将/tmp 权限设置为 777 但无济于事
  4. 设置 apc.enable_cli = 1 并从 cli 运行脚本
  5. 设置 apc.max_file_size = 5M(以防万一)
  6. 在 WHM 中将 php 处理程序从 dso 切换到 FastCGI(然后将其切换回 dso,因为它没有解决问题)
  7. 甚至尝试重启容器

任何线索任何人。

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

最佳答案

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

这是由我的托管服务提供商的支持人员发现的,因此对如此强大的支持表示赞赏。我几天都不会发现这个问题。

思想应该发布答案以防其他人偶然发现这个问题。

关于php - APC 文件缓存不工作,但用户缓存正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7337859/

相关文章:

php - 如何在php中将具有相同键的数组合并为一个

php - Importbuddy 内部 500 服务器错误步骤 3

linux - 显示当前目录的磁盘空间使用情况,不包括子目录的大小

php - 我不断在 hMailServer 和 XAMPP 的 PHPWebAdmin 页面中获取 "Fatal Error: Class COM not found"

php - UTF-8贯穿始终

Apache 正在运行但无法正常工作

c# - 在构建供客户端使用的 Web 服务时,其他方的应用程序使用何种语言编写是否重要?

php - Nginx 不提供 PHP 文件

c - waitpid 在不应该的时候阻塞

c - vim/ubuntu 中的双引号?