java - Play 框架 [2.5.0 java] - 阻塞的 netty-event-loop 线程导致超时

标签 java playframework akka netty

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

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

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

blocked netty-event-loop threads

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

recovering netty-event-loop threads

我希望有人可以帮助我们确定造成这种情况的原因。除了升级到 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"
  }
}

探查器显示有关被阻止线程的以下信息:

Information from the thread monitor

任何人都可以提供一些关于我们可能做错了什么的见解吗? 感谢您的帮助。

最佳答案

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

因此,我们从项目中完全删除了 Deadbolt,现在负载测试的运行速度比以往更快。

关于java - Play 框架 [2.5.0 java] - 阻塞的 netty-event-loop 线程导致超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36142724/

相关文章:

playframework - 创建动态html表单

java - Akka Http 请求和响应模式

scala - 如何使用 Lagom Kafka Message Broker API 安全地跳过消息?

java - 通过 JNA 在 Borland DLL 中查找函数时出错

java - 禁用 java 边框

java - 在 Play 2 中将业务逻辑与 Controller 分离

playframework - Capistrano 和 PlayFramework

java - cache2k put()是否更新过期时间

java - 删除java字符串中的特殊字符

java - 如何监控 akka 中所有终止的消息?