总结: 我将 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 不是原因。
我尝试过跟随事物但没有运气。
- 使用“apc_compile_file”将一些文件强制放入操作码缓存,但没有成功。
- 在启用调试的情况下重新安装了 APC,但错误日志中没有显示任何内容
- 将 mmap_file_mask 设置为/dev/zero 和/tmp/apc.xxxxxx,我也将/tmp 权限设置为 777 但无济于事
- 设置 apc.enable_cli = 1 并从 cli 运行脚本
- 设置 apc.max_file_size = 5M(以防万一)
- 在 WHM 中将 php 处理程序从 dso 切换到 FastCGI(然后将其切换回 dso,因为它没有解决问题)
- 甚至尝试重启容器
任何线索任何人。
注意: 我已经在 serverfault.com 上发布了这个问题,但没有得到太多的意见或答案,所以我在这里发布(因为 stackoverflow 似乎更活跃,我只有 1一个月来测试我的 VPS,看看它是否比共享有任何用处)
最佳答案
看来问题出在 SourceGuardian 上。
从 php.ini 中注释掉 extension="ixed.5.3.lin"后,文件缓存现在工作正常。
这是由我的托管服务提供商的支持人员发现的,因此对如此强大的支持表示赞赏。我几天都不会发现这个问题。
思想应该发布答案以防其他人偶然发现这个问题。
关于php - APC 文件缓存不工作,但用户缓存正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7337859/