0

这有点复杂,可能属于其他一些 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 连接缓存(如果可能相关)。

4

1 回答 1

1

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

于 2012-04-25T15:44:26.207 回答