gpt4 book ai didi

.net - 多个时间桶的跟踪指标 - 已知算法?

转载 作者:行者123 更新时间:2023-12-02 02:31:20 24 4
gpt4 key购买 nike

在过去的几周里,我想测量一些可能经常发生的事件(比如在 2D 平滑滚动 UI 中重绘帧所花费的时间)或可变频率(就像到达网络服务端点的消息一样)。我已经有了测量 1)“正常”频率、2) 当前频率、3) 最小值、4) 最大值的想法。我想在多个时间段内衡量这些。

例如,一个网络服务可以在 100 毫秒内收到 10 条消息,然后在 5 分钟内收不到任何消息。在 UI 示例中,它可能以 60 FPS 的速度连续运行 10 秒,然后 GC 命中并且单个帧可能会“卡住”1 秒,这完全破坏了 UI 效果。

我认为这些类型的测量可以使用一组“桶”来收集测量数据。但不像time series我最关心的 FPS 测量是未达到正常间隔的测量(在 UI 示例中正常是每 1/60 秒绘制一帧,但我关心的是长 60 倍)。因此,为了在正常情况和异常情况下都有用,可以使用“样本桶”的层次结构。

1..10 个“微型”桶,每个桶测量 1/10 秒
需要许多“微”桶才能将准确的滑动窗口保持在“正常”水平

1..60 个“正常”桶,每 1 秒
1..60 个“宏”桶,每桶 1 分钟
...水平可以持续:小时、天、月、年

可以在每个级别的每个桶中保留一组指标(avg、min、max、count)。当桶的时间段到期时,桶可以“提升”到下一个级别并组合到该级别的“样本队列”中。这将为层次结构中每个“级别”的每个存储桶的每个聚合提供准确的滑动窗口测量,同时使用相对较少的 CPU 或内存。

在开发环境中,我认为“微观”级别的示例可用于在调试时识别实时问题。在生产中,“正常”级别可以显示给最终用户,而“宏观”级别可以存储用于长期趋势和分析(以建立长期基线)。一旦确定了模式,似乎很容易以编程方式记录指标中的重大变化或对其使用react(例如消息速率下降以刷新内存缓存),而不会对可接受的异常 react 过度(例如 UI 中的 GC 暂停)。

我知道这有点长,但这似乎是一个简单的想法,而且我在网络上找不到任何执行此操作的类或框架(至少在我选择的框架 .NET 中找不到)。这是用于测量和评估应用程序、系统或测量的健康状况的已知模式,但我就是找不到它吗?任何可通过开源或非处方药获得的监控库或统计方法?

附言由于采样率可能很高,我认为 Windows 上的 PerformanceCounters 不适合“微观”级别(在某些情况下每秒更新指标多次,例如 UI FPS 的实时显示)。此外,如果该解决方案适用于 Mono 和 Silverlight(如果 PerfCounters 不可用),那就太好了。附言我花了几个小时在 .NET 中寻找统计库,找到了几个,但找不到像我上面描述的那样简单的“分层时间限制采样”。许多计数有界采样,这在这里不适用,因为像重绘率和消息到达率这样的数据流并不总是以固定的时间间隔发生。

最佳答案

这看起来在金融服务中很常见,当原始数据集(甚至原始数据的索引)不适合内存时,使用“时间压缩”来加速数据分析。

此链接提供了一个 SQL 示例。我想使用相同的内存/速度权衡来跟踪过程中的关键指标。

http://www.codeproject.com/KB/solution-center/Izenda-Speed-Dating.aspx

我想知道我是否遗漏了一些简单的东西,因为这似乎真的很有用,但我没有看到其他人这样做。

关于.net - 多个时间桶的跟踪指标 - 已知算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3725070/

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