【问题标题】:Can a Memcached daemon ever free() unused memory, without terminating the process?Memcached 守护进程能否在不终止进程的情况下释放()未使用的内存?
【发布时间】:2010-09-18 01:20:46
【问题描述】:

我相信您不能强制正在运行的 Memcached 实例取消分配内存,除非终止该 Memcached 实例(并释放它持有的所有内存)。有没有人知道可以证实或否认这种印象的权威文档,甚至是来自可靠来源的邮件列表或博客帖子?

据我了解,Memcached 进程最初分配一块内存(确切的初始分配大小是可配置的),然后在其生命周期内单调增加其内存利用率,受守护进程的最大内存分配大小限制(也可配置) . Memcached 守护程序在任何时候都不会释放任何内存,无论该守护程序是否对其拥有的内存有任何持续需求。

我知道这个问题可能听起来有点发牢骚,语气是“我要求开源项目 X 支持我的特定需求!”根本不是这样——我只对确切的技术答案感兴趣,在这里,我发誓我不会对 Memcached 苛刻。出于好奇,这个问题来自关于在单个服务器上优雅地处理多个 Memcached 实例的可能方法的讨论,考虑到缓存刷新成本可能相当高的应用程序。

但是,如果您针对不同的问题(重新构建我的应用程序、使用不同的缓存实现等)保存您的应用程序建议/建议,我将不胜感激。我确实很欣赏一次好的头脑风暴,但我认为如果这个问题继续关注 Memcached 如何工作和如何工作的技术细节,它将是最有价值的。如果您没有这个特定问题的答案,那么您要说的话可能仍然有价值,但我想有一个不同的、更好的地方来发布更具投机性的 cmets/suggestions/advice。

【问题讨论】:

    标签: memory memory-management memcached


    【解决方案1】:

    这可能是我们目前必须为 memcached 解决的最困难的问题(好吧,无论如何,它的一个变体)。

    释放一块内存需要我们知道 a) 该块中的任何内容都没有在使用中,并且 b) 在我们为重用/释放而清除它的过程中没有任何东西会开始使用它。我听说过一些关于如何解决平板重新平衡问题的非常好的想法,这些问题基本上是相同的,只是我们不是试图释放内存,而是把它交给其他东西(在一些大型安装中这是一个常见问题)。

    此外,free 是否真的会减少进程的 RSS 取决于实现。在许多情况下,malloc/fill/free 将保留映射的内存(除非您的分配器使用 mmap 而不是 sbrk)。

    【讨论】:

      【解决方案2】:

      我很确定这对于 memcached 是不可能的。不过,我看不出它无法实施的任何技术原因。锁定缓存操作,过期足够的密钥以达到所需的大小,更新大小,解锁。 (我确信有更好的方法可以避免在此期间阻塞服务器。)

      【讨论】:

      • 锁定所有缓存操作意味着所有缓存操作都受到锁定。在 memcached 中,几乎每次读写都是无锁的——只有位置和预留需要锁。这是一个可以解决的问题,但是当您深入了解细节并开始发现必须大大降低服务器速度的事情时......好吧,正如人们所说的那样重要,我们没有贡献出血块还没有。
      • 好点。正如我所说,我预计它会相当低效,但这并非不可能。
      【解决方案3】:

      memcachedmemory management的标准和默认机制是slab allocator。这意味着正在为进程分配内存并且永远不会释放给操作系统。基本上,当内存不再用于存储某些数据时,它会被进程持有,以便以后在需要时重用。但是,操作系统会在进程完成时释放进程分配的内存。这就是当你杀死/停止 memcached 时内存被释放的原因。

      memcached 中有一个compile-time 选项来启用malloc/free 机制。这样当free() 被调用时,内存可能会被释放给操作系统(这取决于C 标准库的实现)。但这样做可能会伤害到好的fragmentationperformance

      请在此处阅读有关此问题的更多信息:

      【讨论】:

        猜你喜欢
        • 2015-01-27
        • 2020-07-20
        • 2019-06-12
        • 2019-10-14
        • 2012-01-12
        • 2021-07-24
        • 1970-01-01
        • 1970-01-01
        • 2014-06-26
        相关资源
        最近更新 更多