【问题标题】:Tomcat NIO thread poolsTomcat NIO 线程池
【发布时间】:2017-04-04 23:18:23
【问题描述】:

我了解 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)

【问题讨论】:

    标签: java tomcat nonblocking


    【解决方案1】:

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

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

    【讨论】:

    • 我认为这取决于使用的 tomcat 版本。在 tomcat 8 中,属性是:server.tomcat.maxThreads=.
    • Spring Boot 允许驼峰式maxThreads 和连字符版max-threads。这适用于所有属性。
    【解决方案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-*

    【讨论】:

    • 通过说“如果您将server.tomcat.max-thread 更改为server.tomcat.min-spare-threads 下方,那么您将拥有与max-thread 属性一样多的线程。”你实际上的意思是max-threadmin-spare-threads 属性的值是相等的,对吧?
    • 不,我的意思是在下面。在这种情况下,您不会收到错误,但最大线程数是最小备用
    • 在这种情况下,要清楚,例如如果max-thread=5min-spare-threads=10 将使用多少个MAXIMUM 线程而不是在ThreadPool 中?那么max-thread 的值会是 minmax 线程池中的线程数吗?提前谢谢你。
    • 那么你将有 5 个线程。抱歉,我最后的评论不清楚(甚至是错误的......)
    • 根本不回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2018-05-22
    • 2018-01-14
    • 2010-12-09
    • 2023-03-26
    • 2016-05-21
    • 2019-09-21
    相关资源
    最近更新 更多