我刚刚将应用程序从 JBoss 7.1.1 迁移到 Wildfly 8.1.0 Final。但现在 Wildfly 时不时(比如每 2 天一次)会冻结,我必须重新启动它。我的应用程序基本上是带有 Resteasy 的 EJB/JPA/JAX-RS。
冻结是指对 Wildfly 的每次 HTTP 访问都永远处于等待状态。我怀疑只有 Undertow 被冻结了,因为我可以在应用程序日志中看到计划的任务正在执行,尽管这些任务都与网络无关。
我还注意到我的日志中存在以下错误:“响应已提交,无法处理异常”是由 IOException 引起的“通道在块中间关闭,如果您试图写入分块数据,则在写入完毕之前无法关闭通道”。
服务器是运行在 Azure 上的 Ubuntu VM。“物理内存”和“硬盘”空间都很好。根据 Wildfly Management 中的 JVM Runtime,堆、非堆和线程使用情况都很好。
我唯一注意到的是,当我“netstat -aln”时,我有许多永久建立的连接。我每天的客户端不到 100 个,但现在我计算出在端口 8080 上建立了 2K 个连接。
我该怎么做才能更好地诊断和解决这个问题?
谨致问候,雷南
更新:这确实是 8.1.0 中的一个错误,已为 8.2.0 修复,请参阅我的回答,其中包含指向 JbossDeveloper 上打开的问题的链接。
答案1
我想分享我作为 Wildfly 8.1 开发人员/架构师的经验
几天前,我在 Windows/Eclipse 上从 7.1.1 迁移到 8.1。我还注意到了一些不稳定性;开发团队的一名成员进行了迁移,并抱怨 Eclipse 崩溃/行为与 7.1.1 不同。另一名团队成员仍在开发 Wildfly 8.0;似乎以前的版本更稳定。
JBOss 会告诉您 Wildfly 不是生产应用服务器;它用于开发目的。但我认为您指出了一些严重的错误/与我的怀疑一致/没有任何实际事实,也没有回答您的问题。
您应该将您的帖子直接转发到 JBoss 论坛,以确保 Wildfly 团队调查该问题并希望修复将成为 8.2 版本的一部分。
答案2
我使用的是 wildfly 8.0 final 与 Spring 4.1.0 和 JSF 2.0 以及 JDK 8.0_u25,遇到了同样的异常: UT005013:发生 IOException:java.io.IOException:UT000029:通道在写入块中途关闭,如果您尝试写入块数据,则在写入完毕之前无法关闭通道。
每次发生异常时,我的服务器 CPU 处理量都会增加 25%。Alhumdulillah 现在我解决了我的问题。
现在我正在使用:Wildfly 8.2.0 Final 与 Spring 4.1.0 和 JSF 2.0 和 JDK 8.0_u25
Wildfly 8.2.0 解决了我的 CPU 处理问题,我观察我的服务器近 8 天,然后我意识到当主机(客户端/用户)向服务器发送一些请求时,需要一些时间进行计算/服务器响应时间,此时用户关闭其浏览器窗口或注销才能从服务器获得响应。当服务器完成处理,然后尝试向其特定主机/客户端请求发送响应时,由于客户端关闭了浏览器窗口,因此会发生 IO 异常。
我希望这会帮助你
答案3
这是 8.1.0 中的一个错误,已在 8.2.0 中修复: