我有一个小的Akka应用程序,它在其actor之间传递许多消息,每个actor对它接收的数据进行一些计算。我想要的是分析这个应用程序,以便查看代码的哪些部分占用大部分时间等等。
我试过VisualVM,但我真的不明白发生了什么。我添加了探查器输出的图片。
我的问题是
答案 0 :(得分:14)
scala.concurrent.forkjoin.ForkJoinPool.scan()
的配置文件中计算。如果允许对所有隐藏包进行采样,则会显示真正的CPU时间消费者。例如,下面的说明性配置文件之前/之后发现线程在sun.misc.Unsafe.park
等待取消停放的大部分时间处于休眠状态。
使用适当的仪器和呼叫追踪可以很好地分析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-akka
和kamon-akka-remote
模块的形式出现,它们带来字节码检测以收集指标并代表您执行自动跟踪上下文传播。浏览从Akka Integration Overview开始的文档,了解它可以做什么以及如何实现。
答案 1 :(得分:7)
就在几天前,announced {4}}现在是免费的TypeSafe TypeSafe console。我不知道分析Scala / Akka应用程序有什么好处。因为你可以尝试JProfiler用于JVM语言,我已经将它用于Java项目,但它并不是免费的,而是用于Java。
答案 2 :(得分:5)
我正在考虑在代码中进行性能分析/度量,因为我还使用Akka / Scala来构建生产应用程序,但我也渴望听到其他方法来确保应用程序是健康的。
非常好用于在代码中收集指标的工具,具有良好的documentation以及对Graphite,Ganglia,Logback等的嵌入式支持。
它有详细的工具,用于收集应用内的统计信息,例如仪表,计数器直方图,时间 - 用于确定应用当前状态的信息,创建的演员数量等等,如果它们还活着,那么当前的信息是什么国家是大多数演员等。
同意,它与分析有点不同,但有助于找到问题的根源,特别是如果与某些构建工具集成。
由于我进行监控非常有趣,它仍然会回答一个稍微不同的问题 - 目前我的应用程序的当前见解是什么? 但是还有另外一件事可能会打扰我们 - 我的代码是什么慢(或马虎)?
出于这个原因,我们有VisualVM和另一个问题的答案 - 如何用VisualVM来描述Akka actor。
此外,我建议尝试使用XRebel探查器,只需添加更多火力来确定哪些代码会降低应用速度。它也付了钱,但在我的项目中,它节省了很多时间来处理草率的代码。
我建议您参加一些游乐场项目,因为您可以免费获得一些监控/分析解决方案,但在更严肃的项目中,我会选择上面提到的内容。
所以我希望,我的概述很有帮助。