如何为许多站点配置APC?

时间:2014-06-24 15:05:33

标签: php apc

我们在一台计算机上运行了许多网站,其中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

几个问题:

  1. 我们修改了apc.ttl,但没有同时更改apc.gc_ttl。降低此值有助于更快地清除文件并减少碎片吗?

  2. 我们最好离开apc.ttl = 0并让每次缓存填充时APC为空并重建?

  3. 提前致谢!

1 个答案:

答案 0 :(得分:0)

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。