我们在一台机器上运行多个站点,带有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/