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

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

我刚刚获得了一个 VPS(带有 cPanel/WHM)来测试使用 apc 文件缓存和用户缓存能在我的应用程序中获得什么好处。

因此,我首先将 PHP 5.3 编译为 DSO(apache 模块)。

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

一切看起来都很好并且 phpinfo 显示 apc 已加载并启用。

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

但是当我开始测试我的 php 应用程序时,apc 中文件缓存信息状态的统计信息为:缓存文件 0(0.0 字节)
命中数 1
未命中数 0
请求率(命中数,未命中数)0.00 缓存请求/秒
命中率 0.00 缓存请求/秒
未命中率 0.00 缓存请求/秒
插入率 0.00 缓存请求/秒
缓存已满计数 0

这意味着没有 PHP 文件被缓存,尽管我浏览了 10 多个包含多个文件的 PHP 文件。所以一定有一些缓存文件。

但是用户缓存运行正常。
用户缓存信息
缓存变量 0 ( 0.0 字节)
命中数 1000
未命中数 1000
请求率(命中数,未命中数)0.84 缓存请求/秒
命中率 0.42 缓存请求/秒
未命中率 0.42 缓存请求/秒
插入率 0.84 缓存请求/秒
缓存已满计数 0

它实际上来自一个 APC 缓存测试脚本,该脚本尝试检索和存储 1000 个条目并给出时间。这是一种简单的基准。

有人能帮我吗?
即使 apc.cache_by_default = 1,也没有 php 文件被缓存。

这是我的 apc 配置
运行时设置
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 默认
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 不是原因。

我也尝试过使用“apc_compile_file”强制将一些文件放入操作码缓存,但没有成功。我还重新安装了 APC 并启用了调试,但错误日志中没有显示任何内容

我也尝试将 mmap_file_mask 设置为 /dev/zero 和 /tmp/apc.xxxxxx,我还将 /tmp 权限设置为 777,但无济于事

有谁知道吗?

更新:我尝试了以下方法,但都不能填充 APC 文件缓存
1. 设置 apc.enable_cli = 1 并从 cli 运行脚本
2. 设置 apc.max_file_size = 5M(以防万一)
3. 在 WHM 中将 php 处理程序从 dso 切换到 FastCGI(然后又切换回 dso,因为这并不能解决问题)
4. 甚至尝试重新启动容器

答案1

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

我的托管服务提供商的支持人员发现了这个问题,所以要为如此出色的支持人员点赞。我可能要花好几天才能发现这个问题。

认为应该发布答案以防其他人遇到这个问题。

相关内容