3

我正在寻找支持每个请求分析统计信息的分析器,最好是沿着程序流(不是通常的线程调用堆栈)。所以基本上每个请求都有一个分析器调用堆栈+顺序调用视图,如下所示:

doGet                 100ms
+ doFilter             95ms
  + doFilter2          90ms
    + validateValues   20ms
    + calculateX       40ms
      + calc1          10ms
      + calc2          30ms
    + renderResponse   30ms

分析哪些类/方法以某种方式配置,对于处理每个方法调用的跟踪分析器,这当然是不可用的。

我知道并使用过 dynaTrace,它的“PurePath”功能(http://www.dynatrace.com/en/architecture-tame-complexity-with-purepath.aspx)支持这一点,但我正在寻找适合的工具可用于较小的项目,并且需要较少的初始投资和设置。

是否有任何“经典”分析器(YourKit 等)支持此功能而我忽略了该功能?

附录:提供一些背景知识:主要目标是为生产系统的监控和分析提供统计数据。首先也是最重要的想法是获取请求需要多长时间的实时统计数据,以防响应时间上升以获得某些(类型)请求的数据(想想 JETM + x)。

每个请求的分析统计允许详细分析为什么只有一些请求很慢,例如,如果 10% 的请求花费的时间是平均请求的十倍。使用汇总统计数据,这是 AFAIK 很难解决的问题。

沿着程序流呈现调用的分析统计数据也是如此,因为很容易识别问题在请求中的位置,例如,一个方法执行十个数据库查询,您将每个调用视为一个调用,而不仅仅是十个聚合调用。

理想情况下,测量点在运行时进行配置和启用/禁用。

4

3 回答 3

1

如果您的应用程序是按毫秒计时的,那么您可能只需要一张时间图来暂存 TreeMap,您可以对其进行汇总并写入文件。这是最灵活的,适用于毫秒计时。


对于微秒计时,我对每个阶段都有一个枚举值,然后在 ThreadLocal 数组中记录到达该阶段时的当前时间 (System.nanoTime())。(无对象分配)请求完成后,将时间增量写入文件,例如 CSV 格式。

于 2011-05-31T08:09:25.797 回答
1

我的方法类似于 Peter 的方法,但我没有使用 threadlocals 和在线计算,而是在执行达到有趣阶段时写入日志文件。此外,我使用 AspectJ 生成日志行,我发现它非常方便随心所欲地添加/删除日志行,而无需更改其余的源代码。

于 2011-05-31T08:16:42.523 回答
1

您可以尝试btrace进行选择性测量。它有点类似于 dtrace,如果您在受支持的平台、Solaris、BSD、OS X 上,也可以使用它。

于 2011-06-01T07:50:08.987 回答