【问题标题】:What does Actor[akka:\\play\deadLetters].tell() mean in a New Relic's trace of a Play Framework 2.0 web transaction?Actor[akka:\\play\deadLetters].tell() 在 Play Framework 2.0 Web 事务的 New Relic 跟踪中是什么意思?
【发布时间】:2014-01-13 17:16:02
【问题描述】:

我有一个托管在 Heroku 上的 Play Framework 2.0 Java 应用程序,我正在使用免费的 New Relic 插件对其进行监控。对于大多数交易,大部分时间都花在 New Relic 标记为Actor[akka:\\play\deadLetters].tell() 的地方。在此期间应用程序实际在做什么?

【问题讨论】:

    标签: heroku playframework playframework-2.0 akka newrelic


    【解决方案1】:

    作为一个简单的描述,Akka(http://en.wikipedia.org/wiki/Akka_(toolkit);http://akka.io/)是 Play 框架的一部分,是它们的集成之一。由于 Play 上的应用程序用于监控,因此 Akka 发出的 HTTP 请求被跟踪为 Web 事务。简而言之,我们测量它。至于具体是做什么的,我建议从第一句话中查看 Play 文档或 Akka 链接。

    如果您的 Java 代理版本低于 3.2.0,升级 Java 代理将为您带来以下变化:

    现在默认忽略 akka.actor.ActorKilledException

    ActorKilledException 通常在 Play 应用程序中作为 正常运行的应用程序中的控制机制。在以前 版本,此异常夸大了报告的错误率。这些 现在默认情况下会处理异常。您可以覆盖默认值 ignore_errors 列表以提供您自己的异常或省略 ActorKilledException。

    如果此信息有帮助或您需要其他帮助,请告诉我们。

    珍妮·斯旺 新遗物支持

    【讨论】:

    • 嗨,珍妮,感谢您在 stackoverflow 上找到我。我将 New Relic 代理升级到 3.3.2 版,仍然看到相同的内容。
    • 您是否在升级代理的同时重新启动了 JVM?如果没有,它将不会选择新版本。
    • 是的,任何 Heroku 部署都会重新启动 JVM。我能想到的最好的结果是我的应用程序代码的某些部分正在占用这个时间,但似乎 New Relic 代理没有报告足够的细节来显示它是什么,至少在 Play Framework 2 应用程序中是这样。跨度>
    【解决方案2】:

    我不太熟悉 NewRelic 如何收集数据,但是 deadLetters 是一个特殊的 Actor,它接收“发送给已死(或不存在)Actor 的所有消息”。你可以阅读更多关于dead letters in the official docs的信息。

    例如,您可以subscribe to these dead letters and print them(这应该会为您提供足够的信息,然后追踪其来源并进行修复)。可能会遇到许多死信的典型情况是,当您向已停止的 Actor 发送消息,但有人仍在向其发送消息时 - 您应该能够在打印死信后检测到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多