雄猫蔚来螺纹池

2022-09-03 02:48:18

我了解Java NIO(通道,选择器,..)。我想更好地理解Tomcat NIO,以便我可以从Spring boot中适当地配置Tomcat的线程池。

有人可以解释一下每个线程池的目的是什么,以及它们如何与Java NIO相关?如果您还可以指出在处理 HTTP 请求期间使用了哪个线程池,那将很有帮助。

在线程转储期间观察到的一些 Tomcat8 线程池:

http-nio-<port>-Acceptor (usually 1 or 2 threads)
http-nio-<port>-ClientPoller-<index> (usually 2)
http-nio-<port>-exec-<index> (usually 10)
NioBlockingSelector.BlockPoller-<index> (usually 2)

答案 1

http-nio--exec- (通常为 10) => 这可以通过在 application.properties 中设置 “server.tomcat.max-threads=10” 来控制。如果设置为 1,则只能看到一个线程 http-nio--exec-1。

我太试图找出其他线程池。


答案 2

Spring和Tomcat的正确解决方案是使用2个属性:

server.tomcat.max-threads=200 # Maximum amount of worker threads.
server.tomcat.min-spare-threads=10 # Minimum amount of worker threads

如果更改 下面的 ,则线程数将与 max-thread 属性一样多。server.tomcat.max-threadserver.tomcat.min-spare-threads

如果更改 ,则将具有指定数量的线程。server.tomcat.min-spare-threads

例如,如果设置为:,则将有 15server.tomcat.min-spare-threads=15http-nio-8080-exec-*


推荐