【发布时间】:2010-07-28 14:50:45
【问题描述】:
我已经玩了很长时间了,但我不知道该怎么做。我在 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 世界中的真正含义,而且您似乎几乎无法避免它。
谁能解释一下这个问题?
【问题讨论】:
-
您是否尝试过增加共享内存的数量?
-
感谢您的回复。尽管我从未将其设置为超过 512MB,但我已经多次使用这些设置。有趣的是,当我将其配置为 256MB 时,内存使用量通常在 220MB 范围内,剩余大约 30MB 可用。但是,与配置为 512MB 时相比,我的缓存完整计数通常开始增加得更快,即使原始内存使用情况非常相似。