代码之家  ›  专栏  ›  技术社区  ›  Nicolò Martini

APC缓存碎片问题

  •  4
  • Nicolò Martini  · 技术社区  · 14 年前

    我在一个媒体网站上运行APC(php cache)(每天访问13000次),在CentOS服务器5上运行php 5.3.3、APC 3.1.4和4Gb的RAM。在过去的几周里,我经历了很多 unable to allocate memory for pool “日志中的错误,而且站点经常会关闭。

    我想问题出在APC。从统计数据来看,一两个小时后缓存就满了,碎片总是跳到100%。这是apc.ini的配置设置:

    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    00
    apc.lazy_functions  0
    apc.max_file_size   1M
    apc.mmap_file_mask  /dev/zero
    apc.num_files_hint  0
    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.shm_segments    1
    apc.shm_size    512M
    apc.slam_defense    1
    apc.stat    1
    apc.stat_ctime  0
    apc.ttl 7200
    apc.use_request_time    1
    apc.user_entries_hint   0
    apc.user_ttl    7200
    apc.write_lock  1
    

    apc.filters ? 有解决问题的办法吗?

    2 回复  |  直到 14 年前
        1
  •  7
  •   Collector    14 年前

    您真的应该在您的生产服务器上设置apc.stat=0,它将阻止apc实际到IO检查文件是否已更改。

    同时设置apc.slam_defense=0,因为它已被弃用

    查看其他选项的文档: http://php.net/manual/en/apc.configuration.php

        2
  •  2
  •   Katie    13 年前

    我认为应该为文件支持的mmap设置apc.mmap_file_mask=/tmp/apc-yourusernamehere.XXXXXX;通过添加唯一字符串使文件掩码唯一;必须保留XXXXXX(正好是6xs)才能允许apc添加随机字符串,或者为匿名mmap设置/dev/zero(如果可以释放内存)。

    我可以看到您正在使用/dev/zero,它不必要地占用内存。