2011-11-16 72 views
7

Tôi hiện đang có một ứng dụng được triển khai bằng Tomcat tương tác với cơ sở dữ liệu Postgres thông qua JDBC. Các truy vấn rất tốn kém, vì vậy những gì tôi thấy là một thời gian chờ gây ra bởi Tomcat hoặc Apache (Apache ngồi ở phía trước của Tomcat trong cấu hình của tôi). Tôi đang cố gắng để hạn chế các kết nối đến cơ sở dữ liệu đến 20-30 kết nối đồng thời, để cơ sở dữ liệu không bị choáng ngợp. Tôi đã thực hiện điều này bằng cách sử dụng cấu hình \ .., đặt maxActive thành 30 và maxIdle thành 20. Tôi cũng đã tăng maxWait.Tomcat - Cấu hình maxThreads và acceptCount trong kết nối Http

Trong trường hợp này, tôi giới hạn việc sử dụng cơ sở dữ liệu, nhưng tôi muốn các kết nối/yêu cầu được BỎ trong Tomcat. Apache có thể chấp nhận 250 yêu cầu đồng thời. Vì vậy, tôi cần phải đảm bảo Tomcat cũng có thể chấp nhận điều này nhiều, nhưng xử lý chúng một cách thích hợp.

Tomcat có hai cài đặt trong HTTP nối tập tin config:

  • maxThreads - "Số lượng tối đa của đề xử lý yêu cầu phải được tạo ra bởi Connector Http, mà do đó xác định số lượng tối đa của đồng thời yêu cầu có thể được xử lý. "
  • acceptCount - "Độ dài hàng đợi tối đa cho các yêu cầu kết nối đến khi tất cả các chuỗi xử lý yêu cầu có thể đang được sử dụng. Mọi yêu cầu nhận được khi hàng đợi đầy sẽ bị từ chối".

Vì vậy, tôi đoán rằng nếu tôi đặt maxThreads với số tối đa của kết nối JDBC (30), sau đó tôi có thể thiết lập acceptCount để 250-30 = 220.

Tôi hoàn toàn không hiểu được sự khác biệt giữa một thread đang được WAITING trên một kết nối JDBC để mở ra từ pool, so với một luồng được xếp hàng ... Suy nghĩ của tôi là một luồng được xếp hàng đang tiêu thụ ít chu kỳ hơn trong khi luồng đang chạy, chờ đợi trên JDBC pool được chi tiêu chu kỳ kiểm tra hồ bơi cho một chủ đề miễn phí ...?

+0

Tôi đang cố gắng đánh giá trải nghiệm của người khác bằng cách sử dụng các tỷ lệ chủ đề khác nhau: kết nối. Bạn có các giá trị sản xuất được điều chỉnh của mình không, bạn có giữ tỷ lệ các chuỗi tomcat tối đa cho các kết nối jdbc 250: 30 không, nếu vậy, nó hoạt động như thế nào cho bạn? – ledlogic

Trả lời

2

Lưu ý rằng trình kết nối HTTP dành cho các yêu cầu HTTP đến và không liên quan đến JDBC. Có thể bạn muốn cấu hình các hồ bơi kết nối JDBC riêng biệt, chẳng hạn như connectionProperties cho kết nối JDBC: http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

0

Trừ khi ứng dụng của bạn xử lý yêu cầu trong một vấn đề mà nó kết nối trực tiếp đến cơ sở dữ liệu trên mỗi http cơ sở kết nối, sau đó bạn nên cấu hình hồ bơi kết nối JDBC của bạn dựa trên những gì phần mềm cơ sở dữ liệu của bạn được thiết lập để/có thể xử lý và maxthreads của bạn đến những gì ứng dụng/phần cứng của bạn có thể xử lý.

0

Giữ giá trị maxActive (của tổng hợp kết nối db) nhỏ hơn maxThreads (nghĩa là số lượng các chuỗi đồng thời) có ý nghĩa trong hầu hết các trường hợp. Bạn có thể đặt acceptCount thành giá trị cao hơn tùy thuộc vào lưu lượng truy cập bạn mong đợi trong trang web của mình và yêu cầu xử lý một yêu cầu nhanh như thế nào.

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