【问题标题】:How to tell why Play 2.4 is shutting down如何判断 Play 2.4 关闭的原因
【发布时间】:2015-05-14 21:03:00
【问题描述】:

我有一个 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 Actor 系统,每个系统有 5-30 个 Actor。他们发送一些 http 流量,并且一个系统涉及数据库查询。

【问题讨论】:

    标签: logging playframework-2.0 akka


    【解决方案1】:

    我想我几天前遇到了几乎同样的问题。在我的情况下,我能够在堆栈跟踪中发现演员系统正在关闭到 NullPointerException。

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

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

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

    【讨论】:

    • 现在试一试。我看看有没有帮助。
    • 添加这些后,Play 已经关闭了好几次,很遗憾
    • 确保它指向您正确的 akka 系统?您可以在同一个 JVM 上拥有多个系统,如果数据库内容在具有不同名称的系统中关闭,则需要对其进行设置。
    【解决方案2】:

    让我们看看你的 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)
          }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多