Tomcat进程阻止从重新绑定到重新启动porton的其他进程

时间:2012-04-25 15:25:25

标签: java servlets network-programming

这有点复杂,可能属于其他StackExchange站点。

我们有一个Tomcat Web应用程序和一个“审计”应用程序。审计应用程序在其自己的进程中运行,并侦听端口60000以获取HTTP请求。在正常情况下,Tomcat通过HTTP将审计数据发送到审计进程。这两个进程都在同一主机上运行。

系统是CentOS 5.7,Tomcat是6.0.33版。审计应用程序是Flume代理。

有时,我们的审计应用程序需要重新启动。当它发生时,它通常会成功。

但是为了我们的安慰,经常有一点,当审计应用程序重新启动时,它会在端口60000上出现BindException失败。我们可以停止审计应用程序,确保它已经死了,然后重新启动它,但它会一直失败。解决问题的唯一方法是重新启动Tomcat服务器 - 不知何故,它阻止审计应用程序侦听端口60000。

当我们在审计应用程序关闭时执行“lsof”并在端口60000上查找数据时,我们得到:

java      13178    tomcat   47u     IPv6     34165085         TCP <hostname>:60000-><hostname>:60000 (ESTABLISHED)

我们无法真正理解这个只写入localhost:60000的Tomcat进程偶尔会阻止其他应用程序监听端口60000。

Web应用程序正在使用Java中内置的默认HTTP连接缓存(如果可能相关)。

1 个答案:

答案 0 :(得分:1)

我猜这与端口60000处于“短暂端口”1范围有关。也许你的Tomcat Webapp有时会以某种方式抓住端口60000,阻止另一个应用程序绑定到端口。也许尝试使用不在审计服务器临时范围内的端口?