我读过zipkin,但据我了解,zipkin适用于跟踪网络请求和时间的历史记录(通过Finagle)。但是,我可以使用zipkin来跟踪java方法调用的时间和位置吗?例如,我想跟踪foobar()
执行所需的时间,以及foobar()
内部调用的其他方法及其执行时间等等。
答案 0 :(得分:1)
答案 1 :(得分:1)
不,根本不适合。为什么?因为Zipkin的架构有多层间接:你必须将你的跨度发送到收集器服务,即使收集器在你自己的机器上运行也会有巨大的开销 - 想象你是从欧洲某个地方的两个邻近城市旅行建议你不要直接从A到B,从A飞到美国纽约,然后回到B.这简直太荒谬了。
至于可能满足您需求的工具:@Jonathan提到的VisualVM和Yourkit适合查看程序中的平均情况 - 如果您需要仔细检查程序中的低级路径InTrace是一个更好的选择。
答案 2 :(得分:1)
Zipkin最重要的是为复杂的分布式服务网络(又称微服务架构)提供可观察性。它并不打算仅支持单个应用程序。
因此,分析器通常是更好的方法,特别是如果您有一个紧急问题需要诊断。
尽管如此,大多数剖析器只会提供Zipkin持续存在的实时数据,允许对大型数据集进行分析。
如果Zipkin已经在您的堆栈中,使用特定方法调用作为子跨度来丰富更高级别的Zipkin跨度(即完整的REST请求)并不是一个坏主意,特别是那些执行I / O的方法。这样,您可以在Zipkin中向下钻取,以更快地确定瓶颈。
否则,您必须首先查看Zipkin范围以获取高级别瓶颈,然后分别查看其他日志或运行分析器,这是低效的。
**如果它已经在您的堆栈中**