我们在一台机器上运行多个站点,带有apc.shm = 4G。这不足以缓存所有内容,因此我们设置了apc.ttl= 600,以便将未使用的条目逐出。不清楚这是否按计划进行。我们看到一个很好的缓存命中率约91%,但100%碎片非常快。
我们还开始看到php没有响应,这需要apache重新启动,但是php或apache日志中没有任何记录。在这段时间内,apache仍然可以提供没有问题的静态文件。我的直觉告诉我这在某种程度上与APC的搅动有关。以下是当前设置:

apc.cache_by_default    1
apc.canonicalize    0
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  /dev/zero
apc.num_files_hint  1024
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    4G
apc.slam_defense    1
apc.stat    1
apc.stat_ctime  0
apc.ttl 600
apc.use_request_time    1
apc.user_entries_hint   4096
apc.user_ttl    7200
apc.write_lock  1

几个问题:
我们修改了apc.ttl,但没有同时改变apc.gc_ttl。降低此值是否有助于更快地清除文件并减少碎片?
我们最好留下apc.ttl = 0并让apc清空,然后在每次缓存填满时重新构建?
提前谢谢!

最佳答案

apc.num_files_hint  1024

这个指令告诉apc它可能需要在缓存中保存多少php文件。
它用作散列键,因此建议将其设为质数
如果真的要缓存4gb的php文件,这显然是不够的!(我想是共享主机)
所以请先在这里放一个更大的数字,比如一个比这个值稍大的素数:
find /var/www -type f -name "*.php" |wc -l

当apache没有响应时,您可能有机会通过对处理php脚本的apache进程进行扫描来了解发生了什么,使用
strace -tt -o output.txt <pid of apache>

使用服务器状态页查找PID。

关于php - 如何为许多站点配置APC?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24390138/

10-11 20:40