2013-07-22 107 views
21

我有一個小的Akka應用程序,它在其actor之間傳遞許多消息,每個actor都會對它接收的數據進行一些計算。我想要的是分析這個應用程序,以便查看哪些代碼部分佔用最多的時間等等。如何配置Akka應用程序?

我試過VisualVM,但我真的不明白髮生了什麼事情。我添加了一個profiler輸出的圖片。

我的問題是

  • 例如是什麼這第一線爲什麼它會佔用這麼多的時間? (scala.concurrent.forkjoin.ForkJoinPool.scan())
  • 由於它們的異步行爲,Akka應用程序可以完全描述嗎?
  • 我可以看到一個特定的actor(-type)爲一個特定的消息(-type)工作了多久,它接收到?
  • 是否有其他最佳實踐分析Akka應用程序?

Profiler

回答

13
  • 有些軟件包默認情況下沒有進行配置文件,他們的時間被記錄在scala.concurrent.forkjoin.ForkJoinPool.scan()的配置文件中。如果允許對所有隱藏的軟件包進行採樣,則將顯示消費者的真實CPU時間。例如,說明性配置文件之前/之後的下列內容揭示了線程在大部分時間被睡眠等待啓動的sun.misc.Unsafe.parkbeforeafter
  • 通過適當的儀器和呼叫跟蹤,Akka應用程序可以很好地進行配置。 Google着名的Dapper, a Large-Scale Distributed Systems Tracing Infrastructure論文包含該技術的詳細說明。 Twitter基於此創建了Zipkin。它是開源的,有extension for distributed tracing of Akka。按照其wiki爲如何建立一個系統,允許

    • 演員系統內部跟蹤調用層次一個很好的解釋;
    • 調試請求處理管道(您可以登錄到跟蹤,使用自定義鍵值對對其進行註釋);
    • 查看派生請求與它們對結果響應時間的貢獻之間的依賴關係;
    • 查找並分析系統中最慢的請求。

    還有塊,Kamon一個新的孩子。它是一個反應友好的工具包,用於監控在JVM之上運行的應用程序,該應用程序對使用Typesafe Reactive Platform構建的應用程序特別感興趣。對於Akka來說,這肯定意味着肯定,並且集成以kamon-akkakamon-akka-remote模塊的形式出現,這些模塊使字節碼工具代表您收集指標並執行自動跟蹤上下文傳播。瀏覽從Akka Integration Overview開始的文檔,瞭解它可以做什麼以及如何實現。

7

就在幾天前類型安全announcedTypeSafe console現在是免費的。我不知道什麼可以更好地分析Scala/Akka應用程序。因爲你可以爲JVM語言嘗試JProfiler,我已經將它用於Java項目,但它不是免費的,也適用於Java。

+4

不幸的是,Typesafe控制檯項目已停止:https://groups.google.com/forum/#!forum/typesafe-console – Sonson123

5

我在想剖析/度的代碼,因爲我也用阿卡/斯卡拉很多關於建設生產應用程序,但我也渴望聽到的替代方法,以確保應用程序是健康的。

  1. Metrics (like Dropwizard)

很好的工具,用於收集指標中的代碼,具有良好的documentation和嵌入式支持GraphiteGangliaLogback

它收集IN-詳細工具應用程序統計信息,如量表,計數器直方圖,計時 - 用於確定應用程序當前狀態的信息,創建了多少演員等,如果他們還活着,當前狀態是多數演員等等。

同意,這與分析有點不同,但有助於找到問題的根源,特別是如果與某些char構建工具集成在一起。

  • Profilers like (VisualVM, XRebel)
  • 由於我做監控的一大樂趣,但它仍然回答了一個稍微不同的問題 - 什麼是我的應用程序的當前見解的權利嗎? 但還有另外一件事可能會打擾我們 - 我的代碼是什麼慢(或馬虎)?

    出於這個原因,我們有VisualVM和另一個答案這個問題 - 如何配置Akka演員與VisualVM。

    此外,我會建議嘗試XRebel探查器,它只是增加了一點點火力,以確定哪些代碼會讓應用程序變慢。它也支付了,但是在我的項目中,它節省了大量的時間來處理潦草的代碼。

  • New Relic
  • 我建議它的一些遊樂場項目,因爲你可以得到一些監測/分析信息:免費的解決方案,但更嚴重的項目,我會去對於我上面強調的事情。

    所以我希望,我的概述是有幫助的。