池化思想是性能优化的一个重要思想,而线程池池化思想的代表。然而线程池的参数总是让无数开发者懊恼。虽然有有理论公式的参考,但是实际的部署情况千壤之别,老程序员只能通过经验来设置线程池的参数。
今天来介绍一款线程池监控工具,看看如何通过DynamicTp来破局。
DynamicTp 是 Dromara 旗下的开源项目(GitHub ⭐ 4.8k+,Gitee ⭐ 2.5k+),针对上述痛点,提供零侵入、全链路、可观测的动态线程池解决方案。

官网地址:dynamictp.cn/
GitHub地址:github.com/dromara/dyn…
Gitee地址:gitee.com/dromara/dyn…
使用线程池 ThreadPoolExecutor 过程中你是否有以下痛点呢?
ThreadPoolExecutor,但是不知道那几个核心参数设置多少比较合适DynamicTp获取可以帮助破局。
技术上有美团线程池实践背书,已在多家企业生产环境验证。
接入非常简单,4步走:
我们先使用无注册中心版本,SpringBoot3.x
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-boot-starter-common</artifactId>
<version>1.2.2-x</version>
</dependency>
spring:
application:
name: boot-dynamictp# 暴露 actuator 端点,用于查看线程池监控
management:
endpoints:
web:
exposure:
include: "*"# DynamicTp 无配置中心模式(本地配置文件,无动态调参,支持监控告警)
dynamictp:
enabled: true
enabledCollect: true
collectorTypes: micrometer,logging
monitorInterval: 5 # 线程池配置
executors:
- threadPoolName: dtpExecutor1
threadPoolAliasName: 测试线程池
executorType: common
corePoolSize: 4
maximumPoolSize: 8
queueCapacity: 200
queueType: VariableLinkedBlockingQueue
rejectedHandlerType: CallerRunsPolicy
keepAliveTime: 60
threadNamePrefix: dtp-test
allowCoreThreadTimeOut: false
waitForTasksToCompleteOnShutdown: true
awaitTerminationSeconds: 5
preStartAllCoreThreads: false
notifyEnabled: true

我们直接使用DtpRegistry的方式。
@GetMapping("/info")
public String info() {
DtpExecutor executor = DtpRegistry.getDtpExecutor("dtpExecutor1");
return String.format(
"线程池: %s | core=%d | max=%d | active=%d | queueSize=%d | queueRemaining=%d | completed=%d",
executor.getThreadPoolName(),
executor.getCorePoolSize(),
executor.getMaximumPoolSize(),
executor.getActiveCount(),
executor.getQueue().size(),
executor.getQueue().remainingCapacity(),
executor.getCompletedTaskCount()
);
}

访问:

访问:

访问:

就这么简单,接入已经完成了,正常的使用线程池即可。剩下的就交给DynamicTp
本节只是介绍了基本的搭建以及入门,后面继续分享如何接入监控、通知报警等。