Php 如何为多个站点配置APC?

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

我们在一台机器上运行多个站点,使用
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\u ttl。降低此值是否有助于更快地清除文件并减少碎片

  • 我们是否最好离开apc.ttl=0,让apc清空并在每次缓存填充时重建

  • 提前谢谢

    apc.num_files_hint  1024
    
    该指令告诉apc可能需要在其缓存中保留多少php文件

    • 它用作散列键,因此建议将其设置为素数
    • 如果你真的需要缓存4GB的php文件,这显然是不够的!(我猜是共享主机)
    所以请先在这里放一个更大的数字,比如一个略大于这个值的素数:

    find /var/www -type f -name "*.php" |wc -l
    
    当apache没有响应时,您可以使用

    strace -tt -o output.txt <pid of apache>
    
    strace-tt-o output.txt
    

    使用服务器状态页面查找pid

    没错,一台机器上的许多Drupal站点都是“共享主机”。我将尝试提高此值。谢谢