【发布时间】:2017-08-29 20:13:16
【问题描述】:
我在性能方面遇到了具体问题,因此开始分析我的应用程序,我在 Jprofiler 中看到了奇怪的统计数据 - Thread.run 在调用树分析中拥有高达 20% 的 CPU 时间,并且进行内部调用并不代表他的时间(大部分接近 0%)。似乎线 Thread.run 本身需要 20%..
这是什么意思,可能某处是线程创建的开销?请指教
【问题讨论】:
-
你在运行方法中的某个地方有旋转等待吗?
-
Thread.run 没有做任何事情,这很可能是分析器中的帐户错误。我所知道的任何探查器都不会测量线程创建的开销,因为它在线程启动之前发生在本机代码中。您是否正在创建许多非常短暂的线程?如果是这样,请改用线程池。这些天我很少直接创建线程,创建线程池即使只有一个。
-
@PeterLawrey 这不是错误,它只是与过滤器配置有关。 run 方法总是被分析,直到第一个匹配调用树过滤器配置的类都成为 run 方法的 self time 的一部分。
-
@PeterLawrey 也许我必须改写一下:时间来自线程入口点和根据过滤器设置分析的第一个类之间的类。想想一个 servlet 引擎和实际的 servlet 实现。如果 servlet 引擎的类被过滤,在容器中花费的时间将最终在 Thread.run 方法中。
-
@PeterLawrey 这实际上是一个常见的混淆源,所以我将在 Thread.run 方法旁边添加一个帮助图标来解释这种情况
标签: java multithreading profiling jprofiler