使用Play Framework作为后端的NewRelic中的交易缓慢

时间:2015-04-16 12:42:58

标签: performance scala playframework netty newrelic

有人可以帮助我阅读NewRelic摘要和跟踪详细信息。以下屏幕截图包含单个事务的跟踪,这些事务不会对数据库创建任何查询。它只是一个简单的查询,只有几行Scala模板代码,它呈现HTML页面并将其返回给客户端。这只是当前在生产中运行的单个事务。生产有很多更复杂的事务运行,它会对Mongo,Maria,Queue等进行大量外部调用。

跟踪是否揭示了瓶颈可能出现的位置?例如,我们是用尽线程还是工作人员。正如我所说的那样,大多数事务都会进行大量的Web外部调用,这可能会在相当长的时间内保留单个Thread。如果线程或工作人员在Play应用程序中用完了,人们如何实际学习?我们正在使用2.1.4。

以下来电实际发生了什么?

Promise.apply 21.406ms

Async Wait 21.406ms

Actor.tell 48.366ms

PlayDefaultUpstreamHandler 6.292ms

NewRelic Trace details

NewRelic Summary

编辑:

以下来电的目的是什么?那些人的平均通话时间非常长。

scala.concurrent.impl.CallbackRunnable.run()
scala.concurrent.impl.Future$PromiseCompletingRunnable.run()
org.jboss.netty.handler.codec.http.HttpRequestDecoder.unfoldAndFireMessageReceived()

enter image description here

编辑:

play {
  akka {
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
    loglevel = WARNING
    actor {
      default-dispatcher = {
        fork-join-executor {
          parallelism-min = 350
          parallelism-max = 350
        }
      }
      exports = {
        fork-join-executor {
          parallelism-min = 10
          parallelism-max = 10
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

我不确定1年后这对你有帮助,但我认为你遇到的性能问题与Play,Akka或Netty无关。

问题出在您的代码业务逻辑或数据库访问中。您在PromiseCompletingRunnable和unfoldAndFireMessageReceived中看到的重要时刻都具有误导性。这个时期由newrelic以错误和误导的方式报告。请阅读这篇文章:

Extremely slow play framework 2.3 request handling code

我遇到了类似的问题,而且我的数据库中存在类似问题,但是newrelic在netty中报告了很多次。

我希望这对你有帮助。