我最近升级到2.5。一切正常,直到系统忙于生成报告(在单独的线程中),当我突然无法访问Web应用程序中的任何页面时。我没有在日志中看到任何错误。播放2.3.8版本在相同的情况/负载下工作正常。除了下面列出的用户之外,我没有看到其他解决方案,然后移除死锁以查看是否解决了问题。 TIA
deadbolt 2.5.4 "发挥-authenticate_2.11" %" 0.8.1"
我看到其他几个用户遇到了类似的问题,不得不删除死锁来解决问题。
Play framework [2.5.0 java] - Blocked netty-event-loop threads resulting in timeout
Play 2.5 application requests hang
(2月8日和17日)我仍然在研究这个问题,因为它在两台生产机器上出现故障,但在两台开发机器上工作。开发机器是物理的,并且具有稍微更新的Java版本。生产机器都是虚拟的,并运行Java build 1.8.0_66。一旦我解决了这个问题,我将努力调整线程池。我发布了两个解决方案,这两个解决方案都适用于两台开发机器(Java的物理机器> 1.8.0_66)。
有关详细信息,请参阅https://www.coalliance.org/play-25-upgrade。
答案 0 :(得分:0)
我遇到了类似的问题,在我的情况下,应用程序在此错误后无响应:
PersistenceException: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
我发现在play-authenticate的TokenAction类中静态使用Ebean是一个问题,我不得不改变这个:
public static void deleteByUser(final User u, final Type type) {
QueryIterator<TokenAction> iterator = find.where()
.eq("targetUser.id", u.id).eq("type", type).findIterate();
Ebean.delete(iterator);
iterator.close();
}
对此:
public static void deleteByUser(final User u, final Type type) {
QueryIterator<TokenAction> iterator = find.where()
.eq("targetUser.id", u.id).eq("type", type).findIterate();
while(iterator.hasNext()) {
iterator.next().delete();
}
iterator.close();
}