【发布时间】: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