【发布时间】:2015-05-01 13:26:56
【问题描述】:
很多时候,在编写应用程序时,我希望在 stacktrace 中分析和测量所有方法所花费的时间。我的意思是说:
Method A --> Method B --> Method C ...
A 方法在内部调用B,它可能会调用另一个。我想知道在每个方法中执行所花费的时间。这样在 Web 应用程序中,我可以准确地知道代码的哪一部分所消耗的时间百分比。
为了进一步解释,在 Spring 应用程序的大多数时候,我编写了一个切面,它为类的每个方法调用收集信息。最后给了我总结。但我讨厌这样做,它重复且冗长,需要不断更改正则表达式以适应不同的类。相反,我想要这样:
@Monitor
public void generateReport(int id){
...
}
在方法上添加一些注释将触发检测 api 收集此方法和以后调用的任何方法所用时间的所有统计信息。并且当这个方法退出时,它会停止收集信息。我认为这应该相对容易实现。
问题是:是否有任何合理的替代方案可以让我为一般的 java 代码做到这一点?或任何快速收集此信息的方法。甚至是 Spring 应用程序的 Spring 插件?
PS:与XRebel 完全一样,它会生成漂亮的安全、dao、服务等部分代码所花费的时间摘要。但它需要一个炸弹。如果你买得起,你一定要买。
【问题讨论】:
-
记录在这里。如果 B 和它的被调用者消耗了 50% 的时间,那么 B 有 50% 的时间在堆栈上。如果 B 调用 C 使用 40% 的时间,那么堆栈有 40% 的时间将 B 在 C 之上。无论您想知道什么时间信息,作为运行时间的一小部分,您可以通过查看 10 or so random stacks 获得。它不会向您展示不需要太多时间的东西;我敢打赌,您正在寻找需要大量时间的东西。