我在 linux 服务器上遇到了 JBoss AS 7 的奇怪行为。当我使用我的应用程序部署战争时,服务器不会响应此应用程序的有效 HTTP 请求。当我尝试获取一个有效的 URL 时,我可以在日志中看到调用了后端函数(例如 DAO 方法),调试日志显示我的 JSF 中的后续标记已呈现,我什至可以看到一条消息Rendering View index.xml
,但响应从未到达客户端。当我使用不存在的 URL(例如index.asd
)时,响应为 404,而当我使用错误的页面名称(例如inswxasd.xhtml
)时,响应为 500。因此,只有有效请求才会失败。
我尝试远程连接(使用 firefox)和本地连接(使用wget
),我重现了这个问题。奇怪的是,我部署了我已经使用过的战争,然后它起作用了。
编辑1:
我刚刚注意到,当我发送请求时,服务器进程占用了 200% 的 CPU。此外,只有一个具有堆栈的应用程序会发生这种情况:Hibernate、Spring、JSF 2.0、Primefaces。
编辑2:
这是带有 jstack 输出( jstack -l -F <PID>
) 的馅饼。所有线程都被阻塞。
此外,我注意到(使用top
和转储 JBoss 进程的堆栈)问题很可能是由一个名为http--0.0.0.0-8080-1
. 有任何想法吗?