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

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

系统是CentOS 5.7,Tomcat是6.0.33版。审核应用程序是Flume Agent。

有时,我们的审核应用程序需要重新启动。如果这样做,通常会成功。

但是,为了使我们感到舒适,这太频繁了,当重新启动审核应用程序时,它会失败并在端口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连接缓存(如果可能与此有关)。

最佳答案

我猜想这与端口60000在“临时端口” 1范围内有关。也许您的Tomcat Webapp有时会以某种方式抢占端口60000,以防止另一个应用程序绑定到该端口。也许尝试为审核服务器使用不在临时范围内的端口?

07-27 18:38