我有一个应用程序在带有 jdk 1.6 的 jboss 4.2.2 服务器中运行。该程序有一个错误,它在打开连接时没有设置 http 连接超时。因此,当第三方出现问题时,连接会永远挂起,这也会导致线程挂起。很快我们的线程就用完了。但是,由于发布周期的原因,我们无法立即进行修复。我想知道有没有办法从 jvm 外部终止网络连接?那么线程可以释放回线程池吗?我可能有很多连接到同一个第三方站点,所以很高兴找出问题连接并杀死那个连接。
谢谢,
我有一个应用程序在带有 jdk 1.6 的 jboss 4.2.2 服务器中运行。该程序有一个错误,它在打开连接时没有设置 http 连接超时。因此,当第三方出现问题时,连接会永远挂起,这也会导致线程挂起。很快我们的线程就用完了。但是,由于发布周期的原因,我们无法立即进行修复。我想知道有没有办法从 jvm 外部终止网络连接?那么线程可以释放回线程池吗?我可能有很多连接到同一个第三方站点,所以很高兴找出问题连接并杀死那个连接。
谢谢,
您可以 grep netstat的输出并使用tcpkill 终止连接,然后使用cron运行它。
然而,这只能是一个非常临时的解决方案。
这个 ServerFault Q & A可能是相关的。它解释说,tcpkill
只有在连接上有活动流量时才会起作用。
(这是因为......显然......tcpkill
通过发送 TCP RESET 数据包来工作。为了让它工作,它需要知道正确的序列号,它只能通过检查会话的其他数据包来解决这个问题。)
在搜索我自己的问题时,我遇到了一个关于如何从外部杀死线程的很棒的教程。