如何判断 Play 2.4 关闭的原因

How to tell why Play 2.4 is shutting down

我有 Play 2.4 应用,目前 运行 处于开发模式,我想将其转为生产模式。一个障碍是 运行 每隔一天左右,它就会无缘无故地关闭。日志中的消息:

2015-05-14 03:06:11 -0600 [INFO] from application in play-fork-run-akka.actor.default-dispatcher-22 - Application shutdown...

我怎样才能让 Play 给我更具体的消息? 这很令人沮丧,因为它什么也没说。在我能看到的任何地方都不会抛出异常,而且我在记录错误方面相当彻底。

关于一些上下文,我在后台使用 运行 3 个 Akka 演员系统,每个系统有 5-30 个演员。他们发送一些 http 流量,一个系统涉及数据库查询。

我想我几天前遇到了几乎相同的问题。在我的例子中,我能够在堆栈跟踪中发现 actor 系统正在关闭死于 NullPointerException。

为了防止 JVM 关闭,您应该添加:

akka.jvm-exit-on-fatal-error = false
play.akka.jvm-exit-on-fatal-error = false

到您的 .conf 文件。我不确定哪个字符串实际上有影响,所以我添加了两个。有帮助。

让我们看看您的 Actor 代码?您可以 trim 将它下载下来用于演示目的吗?

我在 actor 主循环中做了类似的事情。如果我的演员爆炸了,它会非常清楚地记录下来。如果真的爆炸了,我知道为什么。

 private def doWork(workSender: ActorRef, work: Work): Unit = {

      work.doWork().onComplete {
        case Success(res) =>
          log.debug("Success during doWork on {}", work)
          self ! WorkComplete(WorkStatus.Success)
        case Failure(e) =>
          log.error(e, "Failure during doWork on {}", work)
          self ! WorkComplete(WorkStatus.Error)
      }
  }