Tomcat NIO线程池

20

我了解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)
2个回答

6

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

我也在尝试查找其他线程池。


1
我认为这取决于所使用的Tomcat版本。在Tomcat 8中,该属性是:server.tomcat.maxThreads =。 - gstanley
Spring Boot允许使用驼峰式的maxThreads和连字符形式的max-threads,这适用于所有属性。 - Piotr P. Karwasz

6

使用Spring和Tomcat的适当解决方案是使用两个属性:

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-*

通过说“如果您将server.tomcat.max-thread更改为server.tomcat.min-spare-threads以下,则将拥有与max-thread属性一样多的线程。”,您实际上是指max-threadmin-spare-threads属性的值相等,对吗? - NikolaS
不,我的意思是下面这个。在这种情况下,你不会收到错误提示,但最大线程数将是最小空闲线程数。 - RUARO Thibault
在这种情况下,请明确说明,例如如果 max-thread=5min-spare-threads=10,那么线程池中将使用多少最大线程?那么 max-thread 值是否是线程池中线程的最小和最大数量?提前致谢。 - NikolaS
然后你将拥有5个线程。抱歉,我的上一条评论不太清楚(甚至是错误的...) - RUARO Thibault
2
完全没有回答问题。 - Martin Andersson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接