Tomcat - maxThreads проти maxConnections


82

У Tomcat server.xmlте, що є maxThreadsпротиmaxConnections

Я розумію, що maxConnectionsце кількість з'єднань, відкритих до сервера

І maxThreadsце максимальна кількість потоків обробки запитів

Але як два параметри конфігурації працюють разом, очевидно, ви не встановите maxConnections1000 і maxThreads10

Який зв’язок між двома параметрами конфігурації?

<Connector 
    port="8443" 
    protocol="org.apache.coyote.http11.Http11Protocol"
    maxThreads="250" 
    SSLEnabled="true" 
    scheme="https" secure="true"
    clientAuth="false" 
    sslProtocol="TLS" 
    connectiontimeout="20000"
/>

Відповіді:


116

Tomcat може працювати в 2 режимах:

Tomcat 7 за замовчуванням є BIO , хоча, здається, консенсус "не використовуйте Bio, оскільки Nio кращий у всіх відношеннях". Ви встановлюєте це за допомогою protocolпараметра у server.xmlфайлі.

  • БІО буде HTTP/1.1абоorg.apache.coyote.http11.Http11Protocol
  • NIO буде org.apache.coyote.http11.Http11NioProtocol

Якщо ви використовуєте BIO, то я вважаю, що вони повинні бути більш-менш однаковими.

Якщо ви використовуєте NIO, то насправді "maxConnections = 1000" та "maxThreads = 10" можуть бути навіть розумними. Типовими значеннями є maxConnections = 10000 та maxThreads = 200. За допомогою NIO кожен потік може обслуговувати будь-яку кількість з'єднань, перемикаючись туди-сюди, але зберігаючи з'єднання, тому вам не потрібно робити все звичайне рукостискання, що особливо трудомістко з HTTPS, але навіть проблема з HTTP. Ви можете налаштувати параметр "keepAlive", щоб довше підтримувати з'єднання, і це повинно пришвидшити все.


Здається, протоколом за замовчуванням є "HTTP / 1.1", який використовує механізм автоматичного перемикання ( tomcat.apache.org/tomcat-7.0-doc/config/http.html ) "... для вибору блокуючого з'єднувача на основі Java або З'єднувач на основі APR / рідний. Якщо змінні середовища PATH (Windows) або LD_LIBRARY_PATH (у більшості систем Unix) містять вбудовану бібліотеку Tomcat, буде використаний роз'єм APR / рідний. Якщо рідну бібліотеку не вдається знайти, блокуючий з'єднувач на основі Java буде використано "
альпа

13

З документації Tomcat для блокування вводу-виводу (BIO) значенням за замовчуванням maxConnectionsє значення, maxThreadsякщо не використовується Executor (пул потоків), і в цьому випадку замість цього буде використано значення 'maxThreads' від Executor. Для неблокуючого вводу-виводу це, здається, не залежить maxThreads.


7
Я не голосуючи за, але я думаю, ви не відповіли на запитання. Ви просто пояснили, які за замовчуванням є, не навчивши запитувача поняттям, і питання полягає в поняттях.
Тім Купер

2
Зрозумів. Я сприйняв це запитання як таке, що ставить стосунки між ними, а не те, що вони насправді означають.
Swapnil

1
Ця відповідь також була корисною, оскільки вона пояснює, що навіть за допомогою BIO maxConnections може бути більшим за maxThreads (я думаю, що це нове у Tomcat 7)
Іван,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.