JFinal的undertow工作线程数配置

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是不用设置的,按照默认就行了;生产环境记得把undertow.devMode=true配置打开;

增加线程数,系统通道吞吐量就一定能上去吗?不是的,CPU处理有极限,线程数量上去,CPU不一定处理的了;从网上资料看,对Tomcat压测结果显示200个线程跟5000个线程执行的结果是差不多的;所以,吞吐量更多的是跟后端业务处理时长有关系;


评论区

欲风217

2023-11-21 16:41

生产环境记得把undertow.devMode=true配置打开,在生产环境用这个配置合适么?@JFinal

JFinal

2023-11-21 19:15

@欲风217 生产环境 devMode 建议设置为 false。生产环境即便设置成 true 也不支持热加载,有判断

欲风217

2023-11-22 10:29

@JFinal 嗯嗯,知道了。

zzutligang

2024-01-23 14:29

我确实试过,生产环境下devMode=true,也不支持热加载。

热门分享

扫码入社