Tomcat - maxThreads so với maxConnections


81

Trong Tomcat server.xmlđiều gì maxThreadsso vớimaxConnections

Tôi hiểu đó maxConnectionslà số lượng kết nối mở đến máy chủ

maxThreadslà số luồng xử lý yêu cầu tối đa

Nhưng cách hai thông số cấu hình hoạt động cùng nhau, rõ ràng bạn sẽ không đặt maxConnectionsthành 1000 và maxThreads10

Mối quan hệ giữa hai tham số cấu hình là gì?

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

Câu trả lời:


115

Tomcat có thể hoạt động ở 2 chế độ:

  • BIO - chặn I / O (một luồng cho mỗi kết nối)
  • NIO - I / O không chặn (nhiều kết nối hơn luồng)

Tomcat 7BIO theo mặc định , mặc dù sự đồng thuận dường như là "không sử dụng Bio vì Nio tốt hơn về mọi mặt". Bạn đặt điều này bằng cách sử dụng protocoltham số trong server.xmltệp.

  • BIO sẽ HTTP/1.1hoặcorg.apache.coyote.http11.Http11Protocol
  • NIO sẽ là org.apache.coyote.http11.Http11NioProtocol

Nếu bạn đang sử dụng BIO thì tôi tin rằng chúng ít nhiều phải giống nhau.

Nếu bạn đang sử dụng NIO thì "maxConnections = 1000" và "maxThreads = 10" thậm chí có thể hợp lý. Giá trị mặc định là maxConnections = 10.000 và maxThreads = 200. Với NIO, mỗi luồng có thể phục vụ bất kỳ số lượng kết nối nào, chuyển đổi qua lại nhưng vẫn giữ nguyên kết nối, vì vậy bạn không cần phải thực hiện tất cả các thao tác bắt tay thông thường, đặc biệt tốn thời gian với HTTPS mà thậm chí là vấn đề với HTTP. Bạn có thể điều chỉnh thông số "keepAlive" để giữ các kết nối xung quanh lâu hơn và điều này sẽ tăng tốc mọi thứ.


12

Từ tài liệu Tomcat , Đối với việc chặn I / O (BIO), giá trị mặc định của maxConnectionslà giá trị maxThreadstrừ khi Executor (nhóm luồng) được sử dụng trong trường hợp đó, giá trị 'maxThreads' từ Executor sẽ được sử dụng thay thế. Đối với IO không chặn, nó dường như không phụ thuộc vào maxThreads.


7
Tôi không phải là người tán thành nhưng tôi nghĩ bạn chưa trả lời được câu hỏi. Bạn chỉ đơn thuần giải thích các giá trị mặc định là gì mà không dạy người hỏi khái niệm và câu hỏi là về các khái niệm.
Tim Cooper

2
Hiểu rồi. Tôi coi câu hỏi như hỏi mối quan hệ giữa chúng hơn là ý nghĩa của chúng.
Swapnil

1
Câu trả lời này cũng hữu ích, vì nó làm rõ rằng ngay cả với BIO, maxConnections có thể lớn hơn maxThreads (tôi nghĩ rằng điều này là mới trong Tomcat 7)
Ivan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.