Tomcat NIO thread pools

12,017

Solution 1

http-nio--exec- (usually 10) => This can be controlled by setting "server.tomcat.max-threads=10" in application.properties. If its set to 1, then you see only one thread http-nio--exec-1.

I am too trying to find out other thread pools.

Solution 2

The proper solution with Spring and Tomcat would be to use 2 properties:

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

If you change the server.tomcat.max-thread below the server.tomcat.min-spare-threads, then you will have as many thread as the max-thread property.

If you change the server.tomcat.min-spare-threads, then you will have as many thread as specified.

For instance, if you set to this: server.tomcat.min-spare-threads=15, then you will have 15 http-nio-8080-exec-*

Share:
12,017
Rag
Author by

Rag

Updated on June 07, 2022

Comments

  • Rag
    Rag almost 2 years

    I understand Java NIO (channels, selector, ..). I would like to understand Tomcat NIO better so that I can configure thread pools of Tomcat appropriately from Spring boot.

    Can someone please explain what is the purpose of each thread pool and how do these work in relevance to Java NIO? It would be helpful if you can also point out which thread pool is used during the processing of HTTP requests.

    Some Tomcat8 thread pools observed during thread dumps:

    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)
    
  • gstanley
    gstanley about 5 years
    i think it depends on the version of tomcat used. In tomcat 8 the property is : server.tomcat.maxThreads=.
  • NikolaS
    NikolaS over 3 years
    By saying "If you change the server.tomcat.max-thread below the server.tomcat.min-spare-threads, then you will have as many thread as the max-thread property." you actually mean values of max-thread and min-spare-threads properties to be EQUAL, right?
  • RUARO Thibault
    RUARO Thibault over 3 years
    No, I meant below. In this case, you don’t get an error, but the max number of thread is the min spare
  • NikolaS
    NikolaS over 3 years
    In that case, be clear, e.g. if max-thread=5 and min-spare-threads=10 how many MAXIMUM threads will be used than in ThreadPool? Will then max-thread value be be min and max number of threads in ThreadPool? Thank you in advance.
  • RUARO Thibault
    RUARO Thibault over 3 years
    Then you will have 5 threads. Sorry, my last comment is unclear (even wrong...)
  • Piotr P. Karwasz
    Piotr P. Karwasz over 2 years
    Spring Boot allows both the camelcase maxThreads and the hyphenated version max-threads. This applies to all properties.
  • Martin Andersson
    Martin Andersson over 2 years
    Doesn't answer the question at all.