【问题标题】:APC cache fragmentation (endless dilemma)APC 缓存碎片(无尽的困境)
【发布时间】:2012-12-15 00:30:10
【问题描述】:

我知道这是a frequently asked question。但我尝试了所有建议的解决方案(apc.stat=0、增加共享内存等),但没有任何好处。

这是带有统计信息的屏幕(您可以看到 nginx 和 php5-fpm)以及在 apc.ini 中设置的参数:

APC 用于多个站点(8-9 个 WordPress 站点和一个使用 MediaWiki 和 SMF)上的系统和用户缓存条目。

你有什么建议?

【问题讨论】:

    标签: caching apc php


    【解决方案1】:

    每个 wordpress 网站都会在用户缓存中缓存健康的数量。我自己对此进行了深入研究,并发现最好的“猜测”是,如果您在 APC 中使用用户缓存,请将碎片保持在 10% 以下。这有时可能意味着您需要尝试保留超过您打算实际用于缓存的内存量的 10 倍以避免碎片。从您所在的位置开始并不断增加分配的内存,直到运行一段时间后碎片保持在 10% 以下。

    顺便说一句:被缓存的 wordpress 页面很大,因此您可能需要大量内存以避免碎片。

    为什么会有 10% 的碎片化?这有点像魔法,但我观察到这是性能开始明显下降的地方。但是,我还没有找到任何好的基准(或运行我自己的受控测试)。

    这 10 倍的数量让我看起来很疯狂,但根本原因是 APC 除了重新启动(完全转储缓存)之外没有办法进行碎片整理。当您只计划使用 100-200m 时,拥有一块 1G 的内存可以提供大量空间来填充,而无需寻找“洞”来放置东西。想想旧的 FAT16 或 FAT32 磁盘在 Windows 98 上的性能不佳——当磁盘已满 50% 以上时,经常需要手动进行碎片整理。

    如果您负担不起多余的内存,您可能需要查看用于用户缓存的 memcached 或普通旧文件缓存。

    【讨论】:

    • 感谢详细的回复! :) 我想我会尝试增加一点内存(也许从实际的 512MB VPS 切换到 1GB 的)并过滤一些我不太关心的网站... apc.filters = "-/var/www/website1/. *,-/var/www/website2/.*"
    猜你喜欢
    • 2011-04-21
    • 2013-03-12
    • 2012-03-06
    • 2012-05-13
    • 2011-04-26
    • 2018-10-17
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多