这是一个 经常 被问到的 问题,我知道。但是我尝试了所有建议的解决方案(apc.stat=0,增加共享内存等),但没有任何好处。
这是带有统计信息的屏幕(您可以看到 nginx 和 php5-fpm)以及 apc.ini 中设置的参数:
APC 用于多个站点(8-9 个 WordPress 站点和一个带有 MediaWiki 和 SMF)的系统和用户缓存条目。
你有什么建议?
每个 wordpress 站点都将在用户缓存中缓存健康的数量。我自己对此进行了深入研究,并发现最好的“猜测”是,如果您在 APC 中使用用户缓存,请将碎片保持在 10% 以下。这有时可能意味着您需要尝试保留超过 10 倍于您打算实际用于缓存的内存量以避免碎片。从您所在的位置开始并不断增加分配的内存,直到运行一段时间后碎片保持在 10% 以下。
顺便说一句:被缓存的 wordpress 页面很大,因此您可能需要大量内存以避免碎片。
为什么会有 10% 的碎片化?这有点像魔法,但我观察到这是性能开始明显下降的地方。但是,我还没有找到任何好的基准(或运行我自己的受控测试)。
这 10 倍的数量让我看起来很疯狂,但根本原因是 APC 除了重新启动(完全转储缓存)之外没有办法进行碎片整理。当您只打算使用 100-200m 时,拥有一块 1G 的内存可以提供大量空间来填充,而无需寻找“洞”来放置东西。想想旧的 FAT16 或 FAT32 磁盘在 Windows 98 上的性能不佳——当磁盘已满 50% 以上时,经常需要手动进行碎片整理。
如果您买不起多余的内存,您可能需要查看用于用户缓存的 memcached 或普通旧文件缓存。