我们刚刚从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"
}
}探查器显示有关被阻止线程的以下信息:

有谁能提供一些关于我们可能做错了什么的见解吗?谢谢你的帮助。
发布于 2016-03-22 18:39:04
这个问题似乎已经为我们解决了。我们在模板和控制器中使用Deadbolt-java 2.5.0-SNAPSHOT进行授权。我们在日志中看到了一些与Deadbolt相关的超时消息。
因此,我们从项目中完全删除了Deadbolt,现在负载测试的运行速度比以往任何时候都要快。
https://stackoverflow.com/questions/36142724
复制相似问题