线程池调优主要包括两方面
- 线程数调优
- BlockingQueue调优
线程数调优
一般根据任务类型进行调优。增删改查类任务一般属于IO密集型任务,但大部分任务都属于混合型任务。
- CPU密集型任务
经验公式:线程数 = CPU核心数 + 1
为什么要设置成 核心数+1 ?理想情况是设置成核心数,这样每个核都在计算,避免线程切换导致开销。但一般会出现中断等情况,这样就会有核心空闲,所以一般设置成 核心数+1 ,以最大程度利用CPU资源。
Java中可以通过Runtime.getRuntime().availableProcessors()获取CPU核心数。
- IO密集型任务
经验公式:线程数 = 2 * CPU核心数
- 混合型任务
经验公式:线程数 = N * U * ( 1 + WT/ST )
-
-
- N:CPU核心数
- U:目标CPU利用率
- WT:线程等待时间
- ST:线程运行时间
-
N和U都很容易获得和设置。WT和ST可以在运行项目后,在终端输入jvisualvm,启动该工具,选中该项目并切换到Profiler标签下进行查看。自用时间即为ST,总时间 - 自用时间即为WT。
BlockingQueue调优
估计单个任务占用内存 以及 确定线程池计划占用内存后即可计算设置BlockingQueue大小。
工具
在实际调优过程中,也可通过下面链接中提供的工具对任务运行进行监测,工具会自动计算出适合的线程数和BlockingQueue的大小。
https://www.javacodegeeks.com/2012/03/threading-stories-about-robust-thread.html
标签:池调,ST,任务,WT,线程,调优,CPU From: https://www.cnblogs.com/shan218/p/17092570.html