首页 > 解决方案 > 如何计算线程池中线程的有效执行时间,而不是线程的生命周期?

问题描述

遇到过线程超时问题,我想可能是线程调度问题,但不确定是不是这样。业务场景如下。

我的同事负责编写服务。他使用java的多线程技术,线程池使用Executors.newFixedThreadPool。该服务需要处理一些复杂的业务逻辑。复杂的业务逻辑需要我来支持。我写了一个算法模块打包成jar,算法模块测压的时间平均10ms左右。当然这是单线程环境下的结果。当他把我的模块放入程序运行时,使用压测程序测试服务时,线程数了几分钟算法。当然,这个时间是线程的生命周期。当单台机器使用相同参数调用的程序时,时间仍然是几毫秒。所以问题就来了。为什么会超时?

我的同事没有向我提供该计划的更多细节。他认为这个程序很耗时。我对他的行为很生气,但问题总是需要解决。我对线程调度算法了解不多,他也是。现在想统计线程的有效执行时间,但是在java.lang.Thread对象中没有看到相关的方法,不知道有没有其他方法可以统计。

我也想知道是否有其他方法可以解释这个问题。

标签: javatimethreadpool

解决方案


我相信您正在寻找的是profiler。分析器允许您在运行时检测代码,而无需修改源代码(或打包的 jar)来添加性能测量逻辑。探查器将告诉您每个线程正在执行的时间以及每个特定方法被调用/执行的时间。

那里有许多 java 分析器,包括 gui 和 cmd。尝试visualvmjProfilerJava Mission Control等等


推荐阅读