如何推荐Akka应用程序?

时间:2013-07-22 10:33:03

标签: scala profiling akka

我有一个小的Akka应用程序,它在其actor之间传递许多消息,每个actor对它接收的数据进行一些计算。我想要的是分析这个应用程序,以便查看代码的哪些部分占用大部分时间等等。

我试过VisualVM,但我真的不明白发生了什么。我添加了探查器输出的图片。

我的问题是

  • 例如,第一行是什么,为什么需要花费这么多时间? (scala.concurrent.forkjoin.ForkJoinPool.scan())
  • Akka应用程序因其异步行为能够很好地进行分析吗?
  • 我可以看一个特定的actor(-type)对它收到的一个特定消息(-type)的工作时间有多长?
  • 是否还有其他分析Akka应用程序的最佳实践?

Profiler

3 个答案:

答案 0 :(得分:14)

  • 默认情况下,有些软件包未分析,而且它们的时间在scala.concurrent.forkjoin.ForkJoinPool.scan()的配置文件中计算。如果允许对所有隐藏包进行采样,则会显示真正的CPU时间消费者。例如,下面的说明性配置文件之前/之后发现线程在sun.misc.Unsafe.park等待取消停放的大部分时间处于休眠状态。 before after
  • 使用适当的仪器和呼叫追踪可以很好地分析Akka应用程序。谷歌着名的Dapper, a Large-Scale Distributed Systems Tracing Infrastructure论文包含该技术的详细解释。 Twitter基于此创建了Zipkin。它是开源的,有一个extension for distributed tracing of Akka。按照其wiki获取有关如何设置允许

    的系统的详细说明
      
        
    • 跟踪actor系统内的调用层次结构;
    •   
    • 调试请求处理管道(您可以登录到跟踪,使用自定义键值对对它们进行注释);
    •   
    • 查看派生请求之间的依赖关系及其对结果响应时间的贡献;
    •   
    • 查找并分析系统中最慢的请求。
    •   

    街区还有一个新的孩子Kamon。它是一个反应友好的工具包,用于监视在JVM之上运行的应用程序,它特别热衷于使用Typesafe Reactive Platform构建的应用程序。这对于Akka来说肯定是肯定的,并且集成以kamon-akkakamon-akka-remote模块的形式出现,它们带来字节码检测以收集指标并代表您执行自动跟踪上下文传播。浏览从Akka Integration Overview开始的文档,了解它可以做什么以及如何实现。

答案 1 :(得分:7)

就在几天前,announced {4}}现在是免费的TypeSafe TypeSafe console。我不知道分析Scala / Akka应用程序有什么好处。因为你可以尝试JProfiler用于JVM语言,我已经将它用于Java项目,但它并不是免费的,而是用于Java。

答案 2 :(得分:5)

我正在考虑在代码中进行性能分析/度量,因为我还使用Akka / Scala来构建生产应用程序,但我也渴望听到其他方法来确保应用程序是健康的。

  1. Metrics (like Dropwizard)
  2. 非常好用于在代码中收集指标的工具,具有良好的documentation以及对GraphiteGangliaLogback等的嵌入式支持。

    它有详细的工具,用于收集应用内的统计信息,例如仪表,计数器直方图,时间 - 用于确定应用当前状态的信息,创建的演员数量等等,如果它们还活着,那么当前的信息是什么国家是大多数演员等。

    同意,它与分析有点不同,但有助于找到问题的根源,特别是如果与某些构建工具集成。

    1. Profilers like (VisualVM, XRebel)
    2. 由于我进行监控非常有趣,它仍然会回答一个稍微不同的问题 - 目前我的应用程序的当前见解是什么? 但是还有另外一件事可能会打扰我们 - 我的代码是什么慢(或马虎)?

      出于这个原因,我们有VisualVM和另一个问题的答案 - 如何用VisualVM来描述Akka actor。

      此外,我建议尝试使用XRebel探查器,只需添加更多火力来确定哪些代码会降低应用速度。它也付了钱,但在我的项目中,它节省了很多时间来处理草率的代码。

      1. New Relic
      2. 我建议您参加一些游乐场项目,因为您可以免费获得一些监控/分析解决方案,但在更严肃的项目中,我会选择上面提到的内容。

        所以我希望,我的概述很有帮助。