25

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

我尝试了 VisualVM,但我无法真正理解发生了什么。我添加了分析器输出的图片。

我的问题是

  • 例如,第一行是什么,为什么要占用这么多时间?(scala.concurrent.forkjoin.ForkJoinPool.scan())
  • Akka 应用程序由于它们的异步行为而可以被很好地分析吗?
  • 例如,我可以看到一个特定的参与者(-type)对于它收到的一个特定的消息(-type)工作多长时间?
  • 还有其他用于分析 Akka 应用程序的最佳实践吗?

探查器

4

3 回答 3

14
  • 默认情况下没有配置包,它们的时间被计入scala.concurrent.forkjoin.ForkJoinPool.scan(). 如果允许对所有隐藏的包进行采样,则将显示真正的 CPU 时间消耗者。例如,以下说明性配置文件之前/之后揭示了线程大部分时间都通过sun.misc.Unsafe.park等待解除停驻而进入睡眠状态。 前后
  • 通过适当的检测和调用跟踪,可以很好地分析 Akka 应用程序。Google 著名的Dapper, a Large-Scale Distributed Systems Tracing Infrastructure论文包含对该技术的详细解释。Twitter 在此基础上创建了Zipkin 。它是开源的,并具有用于 Akka 分布式跟踪的扩展。关注其wiki以获得有关如何设置允许

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

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

于 2015-10-08T20:58:32.407 回答
6

就在几天前,TypeSafe宣布TypeSafe控制台现在是免费的。我不知道如何更好地分析 Scala/Akka 应用程序。当然,您可以为 JVM 语言尝试JProfiler,我已经在 J​​ava 项目中使用过它,但它不是免费的,而且适用于 Java。

于 2013-07-22T10:34:54.970 回答
5

我正在考虑代码中的分析/指标,因为我也经常使用 Akka/Scala 来构建生产应用程序,但我也渴望听到其他方法来确保应用程序是健康的。

  1. 指标(如 Dropwizard)

收集代码中指标的非常好的工具,具有良好的文档和对GraphiteGangliaLogback等的嵌入式支持。

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

同意,这与分析有点不同,但有助于找到问题的根源,尤其是与一些 char 构建工具集成时。

  1. 像(VisualVM,XRebel)这样的分析器

由于我很喜欢做监控,它仍然回答了一个稍微不同的问题——我的应用程序目前的见解是什么?但是还有另一件事可能会打扰我们——我的代码有什么慢(或草率)?

出于这个原因,我们有 VisualVM 和这个问题的另一个答案 - 如何使用 VisualVM 分析 Akka 演员。

另外,我建议尝试XRebel分析器,它只会增加一点火力来确定哪些代码会使应用程序变慢。它也是有偿的,但在我的项目中,它节省了大量处理草率代码的时间。

  1. 新遗物

我建议将它用于一些游乐场项目,因为您可以免费获得一些监控/分析解决方案,但对于更严肃的项目,我会选择我上面强调的东西。

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

于 2015-10-12T21:11:06.677 回答