2013-07-22 85 views
21

Tôi có một ứng dụng nhỏ Akka truyền nhiều thông điệp giữa các diễn viên và mỗi diễn viên thực hiện một số tính toán về dữ liệu mà nó nhận được. Những gì tôi muốn là để hồ sơ ứng dụng này để xem những phần nào của mã chiếm hầu hết thời gian và vân vân.Làm thế nào để hồ sơ các ứng dụng Akka?

Tôi đã thử VisualVM nhưng tôi thực sự không thể hiểu những gì đang xảy ra. Tôi đã thêm một hình ảnh của đầu ra profiler.

Câu hỏi của tôi là

  • gì ví dụ là dòng đầu tiên này và tại sao nó mất rất nhiều thời gian? (scala.concurrent.forkjoin.ForkJoinPool.scan())
  • Ứng dụng Akka có thể vì hành vi không đồng bộ của chúng được lược tả rõ ràng không?
  • Tôi có thể xem ví dụ một diễn viên cụ thể (loại) hoạt động cho một thông điệp cụ thể (loại) mà nó nhận được không?
  • Có các phương pháp hay nhất khác để lập hồ sơ ứng dụng Akka không?

Profiler

Trả lời

13
  • Có các gói không được lược tả theo mặc định và đó là thời gian của chúng được tính trong hồ sơ của scala.concurrent.forkjoin.ForkJoinPool.scan(). Nếu tất cả các gói ẩn được cho phép để được lấy mẫu, người tiêu dùng thời gian thực CPU sẽ được tiết lộ. Ví dụ, sau đây trước/sau khi các hồ sơ minh họa phát hiện ra rằng các chủ đề được đưa vào giấc ngủ hầu hết thời gian bằng cách sun.misc.Unsafe.park chờ đợi để được unparked. beforeafter
  • Ứng dụng Akka có thể được lược tả khá tốt với thiết bị đo và theo dõi cuộc gọi thích hợp. Giấy Dapper, a Large-Scale Distributed Systems Tracing Infrastructure nổi bật của Google có chứa giải thích chi tiết về kỹ thuật này. Twitter đã tạo ra Zipkin dựa trên đó. Nó có nguồn mở và có extension for distributed tracing of Akka. Làm theo wiki của mình cho một lời giải thích tốt về làm thế nào để thiết lập một hệ thống cho phép để

    • phân cấp dấu vết cuộc gọi bên trong một hệ thống diễn viên;
    • đường dẫn xử lý yêu cầu gỡ lỗi (bạn có thể đăng nhập vào dấu vết, chú thích chúng bằng cặp khóa-giá trị tùy chỉnh);
    • xem phụ thuộc giữa các yêu cầu có nguồn gốc và đóng góp của chúng vào thời gian phản hồi kết quả;
    • tìm và phân tích các yêu cầu chậm nhất trong hệ thống của bạn.

    Ngoài ra còn có một đứa trẻ mới trên khối, Kamon. Nó là một bộ công cụ tương thích để theo dõi các ứng dụng chạy trên đỉnh của JVM, đặc biệt nhiệt tình với các ứng dụng được xây dựng với Nền tảng phản ứng Typesafe. Điều đó chắc chắn có nghĩa là có cho Akka và sự tích hợp đến dưới dạng các mô-đun kamon-akkakamon-akka-remote mang thiết bị bytecode để thu thập số liệu và thực hiện tuyên truyền ngữ cảnh tự động thay cho bạn.Khám phá tài liệu bắt đầu từ Akka Integration Overview để hiểu những gì có thể và cách đạt được điều đó.

7

Chỉ cần một vài ngày trước typesafe announced rằng TypeSafe console tại là miễn phí. Tôi không biết điều gì có thể tốt hơn cho việc lược tả các ứng dụng Scala/Akka. Nguyên nhân bạn có thể thử JProfiler cho các ngôn ngữ JVM, tôi đã sử dụng nó với các dự án Java, nhưng nó không phải là miễn phí và cho Java.

+4

Rất tiếc, dự án bảng điều khiển Typesafe đã dừng lại: https://groups.google.com/forum/#!forum/typesafe-console – Sonson123

5

Tôi đã suy nghĩ về hồ sơ/số liệu trong mã kể từ khi tôi cũng sử dụng Akka/Scala rất nhiều cho việc xây dựng các ứng dụng sản xuất, nhưng tôi cũng háo hức muốn nghe cách khác nhau để đảm bảo rằng ứng dụng là khỏe mạnh.

  1. Metrics (like Dropwizard)

công cụ rất tốt cho việc thu thập số liệu trong các mã, với sự hỗ trợ tốt documentation và nhúng cho Graphite, Ganglia, Logback vv

Nó có các công cụ tiết cho việc thu thập trong- thống kê ứng dụng như đồng hồ đo, biểu đồ truy cập, thời gian - thông tin để tìm ra trạng thái hiện tại của ứng dụng, bao nhiêu tác nhân được tạo, v.v ... nếu chúng còn sống, trạng thái hiện tại của đa số diễn viên, v.v.

Đồng ý, có một chút khác biệt so với việc lập hồ sơ nhưng giúp rất nhiều để tìm nguồn gốc của vấn đề, đặc biệt nếu được tích hợp với một số công cụ xây dựng char.

  1. Profilers like (VisualVM, XRebel)

Kể từ khi tôi là một niềm vui lớn của việc giám sát, nó vẫn trả lời một câu hỏi hơi khác nhau - những hiểu biết hiện tại của ứng dụng của tôi là gì ngay bây giờ? Nhưng có một vấn đề khác có thể làm phiền chúng ta - mã của tôi là gì chậm (hoặc cẩu thả)?

Vì lý do đó, chúng tôi có VisualVM và một câu trả lời cho câu hỏi này - cách cấu hình các diễn viên Akka với VisualVM.

Ngoài ra, tôi khuyên bạn nên dùng thử XRebel trình tiết kiệm chỉ bổ sung thêm một chút hỏa lực để xử lý việc tìm ra mã nào làm cho ứng dụng chậm hơn. Nó cũng được trả tiền nhưng trên dự án của tôi nó đã tiết kiệm rất nhiều thời gian đối phó với mã sloppy.

  1. New Relic

tôi muốn đề nghị nó cho một số dự án sân chơi vì bạn có thể nhận được một số giám sát/profiling giải pháp miễn phí, nhưng các dự án nghiêm trọng hơn tôi muốn đi cho những điều tôi đã nêu ở trên.

Vì vậy, tôi hy vọng rằng tổng quan của tôi hữu ích.

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