开发者社区> 问答> 正文

arthas下一级时间消耗总和小于它的上一级的原因?

用arthas的trace命令,加了--skipJDKMethod false,跟踪方法时发现,下一层级的时间耗费只有它的上级的20%。这是什么原因导致的呢?

如图,上一级时间花费还有500多ms,它的下一级的时间耗费只剩20% 107ms了。

image.png

展开
收起
游客hk5iit4af27mk 2023-07-14 08:49:57 279 0
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    根据您描述的情况,当使用Arthas的trace命令跟踪方法时,发现下一层级的时间耗费只有上一级的20%。这种情况可能由以下原因导致:

    1. 方法调用层级:在代码执行过程中,每个方法的执行时间会受到其上一级调用方法的影响。如果上一级方法执行时间较长,那么下一级方法执行时间可能会相对较短。

    2. 并发或异步操作:如果存在并发或异步操作,例如多线程或回调函数等,不同方法的执行可能是同时进行的。因此,在统计执行时间时,具体的时间分布可能会受到并发或异步操作的影响。

    3. 优化和内部实现:某些方法可能经过编译器优化、JVM内部优化或其他优化手段,使得它们的执行时间较短。

    4. 非可信数据:在统计时间耗费时,请确保您所观察的数据是可靠和准确的,以免受到误差、抽样率等因素的影响

    2023-07-14 17:30:48
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    可能存在下列原因导致问题:

    trace 命令跟踪方法时,如果下一级方法执行速度非常快,可能导致 trace 命令统计的时间不准确,无法反映实际情况。

    在跟踪方法时,如果方法中涉及到异步操作或者多线程操作,可能导致方法执行时间被分摊到不同的线程或者不同的时间片中,从而影响 trace 命令统计的时间。

    如果 trace 命令跟踪的是一些 IO 操作或者网络操作,可能会受到网络延迟、带宽等因素的影响,从而导致方法执行时间不准确。

    2023-07-14 16:56:18
    赞同 展开评论 打赏
  • 当使用Arthas的trace命令进行方法追踪时,跟踪到下一层级的时间耗费只有上级的20%可能是由于以下原因导致的:

    1. 方法调用链的复杂性:可能存在多个嵌套的方法调用,每个方法的执行时间相对较短。这种情况下,上级方法所显示的时间耗费将包括多个下级方法的执行时间,因此下一层级的时间耗费可能相对较小。

    2. 精确度和采样率:Arthas的trace命令是通过字节码增强来实现的,它会在方法的入口和出口处插入代码来记录执行时间。然而,此过程涉及一些开销,并且可能会对性能产生一定影响。为了保持性能,Arthas可能使用了一些采样策略,只记录部分方法调用的执行时间,因此可能会导致某些方法被忽略或精确度降低。

    3. 异步操作或并发问题:如果代码中涉及异步操作、并发或多线程等机制,那么方法调用的时间分布可能会受到影响。例如,某个方法可能会启动一个异步任务并立即返回,在调用链上它的执行时间会很短,但实际上它要花费更长的时间来完成任务。

    2023-07-14 09:17:38
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载