【问题标题】:Play framework [2.5.0 java] - Blocked netty-event-loop threads resulting in timeoutPlay framework [2.5.0 java] - 阻塞netty-event-loop线程导致超时
【发布时间】:2016-03-21 22:20:48
【问题描述】:

我们刚刚从 Play 框架 2.4.3 升级到 2.5.0 (java)。但是,升级后,我们的测试会在几分钟后开始超时。在升级之前,它们运行了一个小时而没有出现错误。

看起来有些线程被阻塞了,系统只是停止响应。

我正在使用 Yourkit java profiler 在我的机器上本地运行较小版本的负载测试。最初,启动了 16 个netty-event-loop 线程。大约一分钟后,我可以看到他们已经开始阻塞:

当他们阻止我开始在负载测试中超时。 当我关闭测试时,这些线程似乎恢复了:

我希望这里有人可以帮助我们确定造成这种情况的原因。除了升级到 Play 2.5 所需的更改之外,我们根本没有修改我们的代码。

这是我们在 application.conf 中使用的 akka 线程池配置:

akka {
  fork-join-executor {
    # The parallelism factor is used to determine thread pool size using the
    # following formula: ceil(available processors * factor). Resulting size
    # is then bounded by the parallelism-min and parallelism-max values.
    parallelism-factor = 3.0

    # Min number of threads to cap factor-based parallelism number to
    parallelism-min = 8

    # Max number of threads to cap factor-based parallelism number to
    parallelism-max = 64

    # Setting to "FIFO" to use queue like peeking mode which "poll" or "LIFO" to use stack
    # like peeking mode which "pop".
    task-peeking-mode = "FIFO"
  }
}

分析器显示以下有关阻塞线程的信息:

谁能提供一些关于我们可能做错了什么的见解? 感谢您的帮助。

【问题讨论】:

  • 您是在使用sbt run 还是在生产模式下运行您的应用程序?
  • 对于本地测试(从中截取这些屏幕截图),我使用 Lightbend activator / sbt run 在 DEV 模式下运行应用程序。但在我们的测试环境中,我们在生产模式下运行。
  • 相同,升级到 2.5.0 后。我们没有使用 Deadbold。仍在寻找错误。
  • 如果有人有提示,我会很高兴。我什至不确定这是否是一个网络问题。这就是我的应用程序的样子:请求得到非常快的响应,但后端突然停止响应。然后过了一段时间(1分钟),它恢复并再次工作。看起来没有线程可以分派请求了...
  • 很抱歉污染了这个线程,但我发现它只发生在 PUT 方法上。我所有的 GET 和 POST 方法都没有问题。我什至复制并切换了我的 GET 和 PUT 端点之间的功能,并且:它是可重现的:只有 PUT 受到影响。网络问题?还有其他人有同样的问题吗?

标签: java playframework akka netty


【解决方案1】:

这个问题似乎已经为我们解决了。我们使用 Deadbolt-java 2.5.0-SNAPSHOT 在模板和控制器中进行授权。我们在与 Deadbolt 相关的日志中看到了一些超时消息。

因此,我们从项目中完全移除了 Deadbolt,现在负载测试的运行速度比以往任何时候都快。

【讨论】:

    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多