2014-04-01 13 views
6

Tôi gặp sự cố với ứng dụng Playframework của mình không được đáp ứng theo thời gian và tôi muốn phát hiện điều này tại thời gian chạy + nhật ký thông tin về những gì hiện đang chạy trên ngữ cảnh thực thi đã cạn kiệt.Làm thế nào để phát hiện tình trạng cạn kiệt scala executioncontext?

Chiến lược tốt nhất để thực hiện điều này là gì? Tôi nghĩ về việc đăng tải các runnables nhỏ lên các bối cảnh thực thi và nếu chúng không được thực thi đúng lúc, tôi sẽ ghi lại một cảnh báo. Thời gian chờ tối đa này tất nhiên nên được cấu hình. Ví dụ: ngữ cảnh thực thi web chính sẽ không bao giờ bị chặn trong hơn 1 giây nhưng bối cảnh thực thi db nền có thể cho phép 30 giây chặn.

Ai đó phải làm điều này trước đây?

thông tin liên quan: http://www.playframework.com/documentation/2.2.x/ThreadPools

+0

bạn có muốn phát hiện xem CPU/bộ nhớ có đang được sử dụng đến giới hạn của nó không? – Augusto

+0

New Relic là một lựa chọn có thể cho bạn? –

+0

Điều này không liên quan gì đến os/cpu/memory, đó là về việc thiết lập các ngữ cảnh thực thi akka chính xác và có các công cụ giúp bạn phát hiện sự xuống cấp hiệu năng do sử dụng các ngữ cảnh thực thi sai trong mã. – Somatik

Trả lời

2

Đó là câu hỏi khá khó để trả lời.

Cấu hình của người điều phối thực sự phụ thuộc vào loại công việc mà các diễn viên của bạn đang thực hiện.

Có lẽ bạn nên xem xét các diễn viên sinh ra tương lai để thực hiện công việc của mình. Nó có thể là một ý tưởng tốt để ấn định trước bối cảnh thực hiện trong file cấu hình và sử dụng chúng như thế này:

implicit val ec : ExecutionContext = context.system.dispatchers.lookup("someDispatcher")

những diễn viên có khả năng gây ảnh hưởng đói.

Hiệu ứng bạn muốn đạt được là đảm bảo rằng các thư được xử lý nhanh chóng và tác vụ chạy dài không ảnh hưởng đến chúng để tách biệt là điều quan trọng ở đây.

Một công cụ tốt để theo dõi ứng dụng của bạn là Bàn điều khiển Typesafe. Bạn có thể xem xét điều phối viên ở đó và thấy rằng độ trễ trong xử lý tin nhắn tăng lên.

Một mối quan tâm khác là xác định các tác nhân tạo ra công việc có nguy cơ cao như I/O mạng. Nếu một cái gì đó xảy ra với việc tạo chuỗi trong không có sẵn một lần nữa trong hồ bơi nó sẽ tạo ra vấn đề.

Rất có khả năng là không thử nghiệm với kích thước của threadpool, bạn sẽ không biết cài đặt nào tốt nhất cho mình.

Hầu hết những lời khuyên tôi đã viết tôi biết từ cuốn sách Effective Akka by Jamie Allen và dường như chúng hoạt động khá tốt đối với tôi. Có một phần trong cuốn sách này Fixing Starvation. Bạn có thể muốn xem xét nó gần hơn.

+0

cảm ơn vì phản hồi, nhưng hãy nói rằng bạn có một thực tập sinh làm việc trong dự án và anh ấy không biết về các quy tắc về những gì có thể được chạy trên điều phối viên nào. Anh ta có thể đặt một hoạt động chặn dài trên điều phối viên web. Tôi muốn hệ thống nói với anh ta rằng anh ta đang làm điều đó/một cái gì đó sai ... – Somatik

+1

Tôi tin rằng việc đạt được điều này tự động sẽ là khá khó khăn để có được. Thành thật mà nói, tôi không có ý tưởng tốt về cách giúp đỡ những người 'nghèo' thực tập. – almendar

+0

Điều mà bạn có thể xem xét là thêm các đặc điểm vào diễn viên của bạn với một số chỉ số định kỳ, ví dụ: số lượng tin nhắn được xử lý và thời gian dành cho khối nhận. Sau đó thu thập chúng và phơi bày chúng để phân tích. – almendar

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