我已经玩了很长时间了,但我不知道该怎么做。我在 CentOs 5 上使用 APC 3.1.3p1 和 PHP 5.2.5。APC 同时充当操作码缓存和用户缓存。大多数情况下,该服务器使用 CacheRouter 模块运行 Drupal 6 站点以支持 APC 缓存。我运行了 APC 3.0.19 一段时间,但它导致 Apache 偶尔锁定(该版本 APC 中记录的错误)所以这就是我在 3.1.3p1 上的原因。
我已将 APC 配置为具有 512 MB 的内存 (mmap)。
症状有点断断续续,但从空缓存开始,这通常是我所看到的:
用户缓存填充得相当慢。尽管初始插入速率约为 20,000 次插入/秒,但用户缓存只会报告几百个,然后是几千个条目,并且增长非常缓慢。我可以将其归因于 write_locking 正在打开,但只是想提一下,以防它对解决手头的问题很重要。几个小时后,它达到了大约 30k 条目的平衡。
碎片化很早就开始并迅速发展。在大约 10 个小时内,我通常处于 100% 的碎片化状态。
总体(操作码 + 用户)缓存使用量稳定在 240MB 左右。它几乎永远不会超过这个水平。大约一天后,我将开始看到用户缓存缓存满计数 (UCCFC) 增加。
在撰写本文时,我的 UCCFC 为 62358,并且还在增长,尽管 APC 报告有 280MB 可用空间。我有一个 7200 的 user_ttl,但我也尝试将其设置为 0 或其他数量,它对问题几乎没有影响。
我怀疑这个问题与碎片有关。现在我的服务器正在报告“碎片:100.00%(24740 个碎片中的 280.0 MB 中的 280.0 MB)”,而 280 MB 恰好是 APC 报告的可用空间量;我认为这是一个巧合。不幸的是,我在文档或其他地方发现了很少的信息来说明“碎片化”在 APC 世界中的真正含义,而且您似乎几乎无法采取任何措施来避免它。
任何人都可以阐明这个问题吗?