JFinal的undertow工作线程数配置
(2023-08-30 10:52:48)
标签:
undertowjfinal线程 |
分类: J2EE笔记 |
1 工作线程数
JFinal对工作线程数做了一层包装,通过UndertowConfig来配置,配置会覆盖到原生Undertow的Builder里面;
1)优先取配置文件;
2)开发环境,受限制,workerThreads=4;ioThreads=2;
3)生产环境,ioThreads=Math.round(cpuNum *
1.6180339);workerThreads=ioThreads * 16;
# 注意
# 是否开发模式:true 值支持热加载,生产环境建议配置成 false(会影响工作线程数)
undertow.devMode=true
2 bufferSize配置按默认就行
// 官方Undertow.java计算如下
private Builder() {
ioThreads =
Math.max(Runtime.getRuntime().availableProcessors(), 2); //
2~CPU核心数
workerThreads = ioThreads * 8; // 工作线程是ioThreads的8倍
long maxMemory = Runtime.getRuntime().maxMemory();
//smaller than 64mb of ram we use 512b buffers
if (maxMemory < 64 * 1024 * 1024) { // 内存<64M
//use 512b buffers
directBuffers = false;
bufferSize = 512;
} else if (maxMemory < 128 * 1024 * 1024) { // //
内存<128M
//use 1k buffers
directBuffers = true;
bufferSize = 1024;
} else { // 内存>128M
//use 16k buffers for best performance
//as 16k is generally the max amount of data that can be sent
in a single write() call
directBuffers = true;
bufferSize = 1024 * 16 - 20; //the 20 is to allow some space
for protocol headers, see UNDERTOW-1209
}
}
3 小结
一般来说,ioThreads、workerThreads是不用设置的,按照默认就行了;
增加线程数,系统通道吞吐量就一定能上去吗?不是的,CPU处理有极限,线程数量上去,CPU不一定处理的了;从网上资料看,对Tomcat压测结果显示200个线程跟5000个线程执行的结果是差不多的;所以,吞吐量更多的是跟后端业务处理时长有关系;
前一篇:mysqlbinlog
后一篇:CPU内核与进程、线程