gpt4 book ai didi

ruby-on-rails - 如何用graphite分析memcache key命中率?

转载 作者:行者123 更新时间:2023-12-04 12:40:59 25 4
gpt4 key购买 nike

我有一个广泛使用缓存的 Rails 应用程序,我想知道应用程序中不同位置的缓存命中率。命中率低的地方显然需要注意。但先测量!

为了获得真实数据,我使用了 Graphite + statsd 组合和 custom Dalli instrumentation招聘 statsd-instrument gem .应用程序中的所有 key 均采用形式 ['place', details...] ,所以我在 Graphite 中得到以下指标:

  • stats.cache.place1.hits
  • stats.cache.place1.misses
  • stats.cache.place2.hits
  • stats.cache.place2.misses

  • 现在我想显示所有的命中率。我能够为一个地方提出以下公式:
    divideSeries(stats.cache.place1.hits, sumSeries(stats.cache.place1.*))

    它工作得很好,但有几十个地方,我不想复制它,更不用说可能出现新的地方了。

    Graphite 专家,这是给您的一个问题:有没有办法显示所有位置的命中率?我在文档中看到了 group* 函数,但它们让我感到困惑。

    理想情况下,我想将我的位置分为 4 类:
  • 命中率高,请求多。 缓存做得很好。
  • 命中率低,请求多。 需要注意。
  • 命中率高,请求少。 完全需要缓存吗?
  • 命中率低,请求少。 绝对删除缓存。

  • 对于如何使用 Graphite 进行此类分析的任何想法,我将不胜感激(我可以请求 JSON 格式的数据并进行自己的数学计算,但我怀疑一定有更简单的方法)。

    最佳答案

    您可以在多个级别使用 glob,因此对于所有缓存如何执行的全局 View :

    divideSeries(stats.cache.*.hits, sumSeries(stats.cache.*.*))

    对于您提到的 4 个类别, the mostDeviant function might be good ,这将有助于找到最高/最低的缓存率。
    mostDeviant(5, divideSeries(stats.cache.*.hits, sumSeries(stats.cache.*.*)))

    根据请求将它们分组到桶中,然后显示单独的派生比率更难。使用重复的回调函数 groupByNode highestAverage 可能有用
    highestAverage(groupByNode(groupByNode(stats.cache.*.*, 3, "sumSeries"), 2, "divideSeries"), 10)

    作为旁注,对于大多数 LRU(最近最少使用)缓存驱逐方案,删除缓存没有多大意义,因为它不会竞争缓存空间。

    关于ruby-on-rails - 如何用graphite分析memcache key命中率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24902154/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com