0

我有一个应用程序在带有 jdk 1.6 的 jboss 4.2.2 服务器中运行。该程序有一个错误,它在打开连接时没有设置 http 连接超时。因此,当第三方出现问题时,连接会永远挂起,这也会导致线程挂起。很快我们的线程就用完了。但是,由于发布周期的原因,我们无法立即进行修复。我想知道有没有办法从 jvm 外部终止网络连接?那么线程可以释放回线程池吗?我可能有很多连接到同一个第三方站点,所以很高兴找出问题连接并杀死那个连接。

谢谢,

4

3 回答 3

0

您可以 grep netstat的输出并使用tcpkill 终止连接,然后使用cron运行它。

然而,这只能是一个非常临时的解决方案。

于 2012-05-12T03:14:46.597 回答
0

这个 ServerFault Q & A可能是相关的。它解释说,tcpkill只有在连接上有活动流量时才会起作用。

(这是因为......显然......tcpkill通过发送 TCP RESET 数据包来工作。为了让它工作,它需要知道正确的序列号,它只能通过检查会话的其他数据包来解决这个问题。)

于 2012-05-12T03:29:32.313 回答
0

在搜索我自己的问题时,我遇到了一个关于如何从外部杀死线程的很棒的教程。

http://www.rhcedan.com/2010/06/22/killing-a-java-thread/

于 2012-05-12T05:42:55.627 回答