2016-09-16 12 views
7

Tôi đang cố gắng hiểu Slick-Hikari hoạt động như thế nào, tôi đã đọc rất nhiều tài liệu nhưng tôi đã sử dụng trường hợp có hành vi mà tôi không hiểu.Slick with Hikari không sử dụng nhiều kết nối khi cần

Tôi đang sử dụng Slick 3 with Hikari, với cấu hình mặc định. Tôi đã có một ứng dụng sản xuất với ~ 1000 người dùng được kết nối đồng thời. Ứng dụng của tôi hoạt động với các ổ cắm web và khi tôi triển khai bản phát hành mới, tất cả các máy khách đều được kết nối lại. (Tôi biết đó không phải là cách tốt nhất để xử lý triển khai nhưng hiện tại tôi không có phân nhóm.) Khi tất cả những người dùng này kết nối lại, tất cả họ đều bắt đầu thực hiện truy vấn để nhận trạng thái người dùng của họ (hiệu ứng dog-pile). Khi nó xảy ra bắt đầu Slick để ném rất nhiều lỗi như:

java.util.concurrent.RejectedExecutionException: Task [email protected] rejected from [email protected][Running, pool size = 20, active threads = 20, queued tasks = 1000, completed tasks = 23740] 

Những gì tôi nghĩ rằng nó xảy ra là hàng đợi trơn cho các truy vấn cấp phát đầy bởi vì nó không thể xử lý tất cả các khách hàng yêu cầu thông tin từ cơ sở dữ liệu. Nhưng nếu tôi thấy các số liệu mà Dropwizard cung cấp cho tôi tôi thấy như sau:

Example of Observed Dropwizard Metrics

gần 16:45 chúng tôi se một triển khai. Cho đến khi ví dụ cũ bị chấm dứt, chúng ta có thể thấy rằng số lượng kết nối đi từ 20 đến 40. Tôi nghĩ điều đó là bình thường, được đưa ra cách quá trình triển khai được thực hiện.

Tuy nhiên, nếu hàng đợi truy vấn của Slick trở nên đầy vì hiệu ứng con chó, tại sao nó không sử dụng hơn 3-5 kết nối nếu nó có 20 kết nối có sẵn? Cơ sở dữ liệu đang hoạt động thực sự tốt, vì vậy tôi nghĩ rằng nút cổ chai là trong Slick.

Bạn có lời khuyên nào để cải thiện quy trình triển khai này không? Tôi chỉ có 1000 người dùng, nhưng tôi sẽ có nhiều hơn trong vài tuần nữa.

+0

Có thể đính kèm một chuỗi chỉ hiển thị tất cả 20 chuỗi được cho là "đang hoạt động" trong ThreadPoolExecutor sẽ giúp ích gì? Họ có bị chặn trên HikariCP không? Họ có bị chặn gì khác không? Ngoài ra, phiên bản (chính xác) của Slick và HikariCP là gì? – brettw

+0

Điều này có giúp http://stackoverflow.com/questions/29897003/slick-3-0-rc3-fails-with-java-util-concurrent-rejectedexecutionexception không? – brettw

+0

Phiên bản nào của Slick và HikariCP? Tôi biết Slick đã thực hiện một số thay đổi để cố gắng tăng đồng thời trong vài tháng qua ... – brettw

Trả lời

0

Dựa trên ngoại lệ "bị từ chối", tôi cho rằng nhiều thao tác trơn trượt được gửi đồng thời trơn trượt, vượt quá kích thước mặc định (1000) của hàng đợi được nhúng trong bóng bẩy.

Vì vậy, tôi nghĩ rằng bạn nên:

  1. tăng hàng đợi kích thước (queueSize) để tổ chức các hoạt động chưa qua chế biến hơn.
  2. tăng số lượng chuỗi (numThreads) trong trơn để xử lý đồng thời nhiều hành động hơn. You can get more tips here
Các vấn đề liên quan