Tomcat NIO线程池

时间:2016-11-21 14:14:36

标签: java tomcat nonblocking

我理解java NIO(频道,选择器,...)。我想更好地理解Tomcat NIO,以便我可以从Spring启动中适当地配置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)

2 个答案:

答案 0 :(得分: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

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

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

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

答案 1 :(得分:1)

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

我太想找出其他线程池了。