2010-07-05 58 views
6

Tôi có thiết lập Apache + Tomcat với mod_jk trên 2 máy chủ. Mỗi máy chủ có cặp Apache + Tomcat riêng và mọi yêu cầu đang được phục vụ bởi các nhân viên cân bằng tải Tomcat trên 2 máy chủ.Apache + Tomcat với mod_jk: cài đặt maxThread khi cân bằng tải

Tôi có câu hỏi về cách maxClient của Apache và số maxThread của Tomcat sẽ được đặt.

Những con số mặc định là, Apache: maxClient=150, Tomcat: maxThread=200

Trong cấu hình này, nếu chúng ta chỉ có 1 thiết lập máy chủ, nó sẽ chỉ làm việc tốt như người lao động Tomcat không bao giờ nhận được kết nối đến hơn 150 cùng một lúc. Tuy nhiên, nếu chúng ta cân bằng tải giữa 2 máy chủ, có thể là nhân viên Tomcat nhận được 150 + (một số từ máy chủ khác) và làm cho luồng tràn maxThread là SEVERE: All threads (200) are currently busy?

Nếu có, tôi có nên đặt số maxThread=300 của Tomcat trong trường hợp này không?

Cảm ơn

+0

Trong thiết lập 2 máy chủ của bạn, cân bằng tải được thực hiện như thế nào trên hai Apache? – JoseK

+0

Nó được thực hiện bởi một bộ định tuyến. Nhưng nó không thực hiện bất kỳ bộ lọc nào theo lưu lượng truy cập. Vì vậy, mỗi Apache có thể nhận được 150 yêu cầu (và nhiều hơn nữa) cùng một lúc. – c4il

Trả lời

7

Đặt maxChủ đề thành 300 phải ổn - không có quy tắc cố định. Nó phụ thuộc vào việc bạn có thấy bất kỳ kết nối nào bị từ chối hay không.

Tăng quá nhiều nguyên nhân khiến mức tiêu thụ bộ nhớ cao nhưng việc sản xuất Tomcats được biết là chạy với 750 luồng. Xem ở đây là tốt. http://java-monitor.com/forum/showthread.php?t=235

Bạn có thực sự gặp lỗi SEVERE không? Tôi đã thử nghiệm trên Tomcat 6.0.20 của chúng tôi và nó ném một thông báo INFO khi maxThreads được vượt qua.

INFO: Maximum number of threads (200) created for connector with address null and port 8080 

Không từ chối kết nối cho đến khi giá trị acceptCount bị gạch chéo. Giá trị mặc định là 100.

Từ các tài liệu Tomcat http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

Chiều dài hàng đợi tối đa cho đến yêu cầu kết nối khi tất cả có thể đề xử lý yêu cầu đang được sử dụng. Bất kỳ yêu cầu nào nhận được khi hàng đợi đầy đủ sẽ bị từ chối. Giá trị mặc định là 100.

Cách nó hoạt động là

1) Khi số lượng yêu cầu đồng thời tăng, chủ đề sẽ được tạo ra lên đến mức tối đa cấu hình (giá trị của maxThreads thuộc tính).

Vì vậy, trong trường hợp của bạn, thông báo "Số lượng chủ đề tối đa (200) được tạo" sẽ xuất hiện tại thời điểm này. Tuy nhiên, các yêu cầu sẽ vẫn được xếp hàng đợi cho dịch vụ.

2) Nếu vẫn nhận được nhiều yêu cầu đồng thời hơn, chúng được xếp hàng đợi đến mức tối đa được định cấu hình (giá trị của thuộc tính acceptCount).

Do đó, tổng số 300 yêu cầu có thể được chấp nhận mà không bị lỗi. (giả định acceptCount của bạn là mặc định là 100)

3) Crossing số này ném lỗi kết nối bị từ chối, cho đến khi tài nguyên có sẵn để xử lý chúng.

Vì vậy, bạn nên ổn cho đến khi bạn nhấn bước 3

+0

Điểm rất hay về acceptCount! Điều này sẽ hoạt động hoàn hảo. Xin lỗi tôi cần phải rõ ràng hơn trong câu hỏi của tôi, nhưng đó là câu hỏi loại-nếu chung của tôi. Ban đầu tôi đã có maxThread = 150 và gặp lỗi SEVERE. Vì vậy, tôi đã thay đổi nó trở lại mặc định 200, nhưng sau đó tôi nhận ra 200 sẽ không đủ hoặc vì lý do mà tôi đã mô tả trong câu hỏi. Cảm ơn rất nhiều cho câu trả lời. Tất cả đều có ý nghĩa bây giờ. – c4il

Các vấn đề liên quan