我们刚刚从Play framework 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"
}
}
剖析器显示有关被阻止线程的以下信息:
任何人都可以对我们可能做错的事情提供一些见解吗? 谢谢你的帮助。
答案 0 :(得分:0)
这个问题似乎已经为我们解决了。我们使用Deadbolt-java 2.5.0-SNAPSHOT进行模板和控制器的授权。我们在与Deadbolt相关的日志中看到了一些超时消息。
所以我们从我们的项目中完全删除了Deadbolt,现在负载测试比以前运行得更快。