【问题标题】:Why isn't varnish taking into account the malloc limit?为什么清漆不考虑 malloc 限制?
【发布时间】:2013-05-17 14:49:21
【问题描述】:

我使用 -s malloc,25G 运行清漆,但进程一直在增长,直到耗尽所有服务器内存并崩溃,重新启动缓存。

知道我可以检查什么来看看有什么问题吗?

服务器有 16 个内核和 32 GB 的 RAM。
我正在使用清漆 3。

28346 ? ss 0:16 /usr/sbin/varnishd -P /var/run/varnishd.pid -a :9290 -T localhost:6082 -f /etc/varnish/default.vcl -s malloc,25G -p thread_pools 16 -p thread_pool_min 160 -p thread_pool_max 16000 -p thread_pool_add_delay 2

【问题讨论】:

    标签: varnish


    【解决方案1】:

    -s malloc,25Gonly limits the cache size,而不是varnishd 进程的大小。

    请务必记住,您使用 -s 参数指定的大小是实际缓存的大小。 Varnish 在此之上有一个开销来跟踪缓存,因此 如果缓存已满,Varnish 的实际内存占用量将超过“-s”参数指定的值。目前的估计(可能会在各个 Varnish 版本上有所变化)是每个对象需要大约 1kB 的开销。对于 100 万个对象,这意味着 1GB 的额外内存使用量。

    如果你有一个大缓存,file 后端可能更可取。

    【讨论】:

      【解决方案2】:

      文档是正确的,但由于内存碎片,问题更加严重。为了安全起见,您应该允许为 malloc stevedore 配置的大小的 1.5 倍到 2 倍

      【讨论】:

        【解决方案3】:

        由于碎片,Varnish 可能会使用给定值的双倍。你可以在这里阅读更多:https://info.varnish-software.com/blog/understanding-varnish-cache-memory-usage

        顺便说一句:Varnish 3 存在安全漏洞,而且已经很老了。请更新

        【讨论】:

        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        • 不,机器人,那么指南就在那里 - 最好阅读它!
        猜你喜欢
        • 2018-05-14
        • 1970-01-01
        • 2020-07-12
        • 2017-04-26
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        • 2016-12-03
        • 2013-04-25
        相关资源
        最近更新 更多