这有点复杂,可能属于其他StackExchange站点。
我们有一个Tomcat web应用程序和一个“审计”应用程序。审计应用程序在其自己的进程中运行,并侦听端口60000以获取HTTP请求。正常情况下,Tomcat通过HTTP将审计数据发送到审计进程。这两个进程在同一主机上运行。
系统为Tomcat5.7,CentOS版本为6.0.33。审核应用程序是Flume Agent。
有时,我们的审计应用程序需要重新启动。当它这样做的时候,它通常是成功的。
但对于我们来说,审计应用程序重新启动时经常会失败,并在端口60000上显示BindException。我们可以停止审计应用程序,确保它真的死了,然后重新启动它,但它总是失败。解决这个问题的唯一方法是重新启动Tomcat服务器--不知何故,它会阻止审计应用程序侦听端口60000。
当我们在审计应用程序关闭时执行"lsof“,并在端口60000上查找数据时,我们得到:
java 13178 tomcat 47u IPv6 34165085 TCP <hostname>:60000-><hostname>:60000 (ESTABLISHED)我们不能真正理解这个Tomcat进程是如何偶尔阻止其他应用程序侦听端口60000的,它只写入localhost:60000。
web应用程序正在使用Java中内置的默认HTTP连接缓存,如果这可能相关的话。
发布于 2012-04-25 23:44:26
我猜这与端口60000在“临时端口”1范围内有关。也许您的Tomcat Webapp有时会以某种方式抢占端口60000,从而阻止另一个应用程序绑定到该端口。也许可以尝试使用不在审计服务器临时范围内的端口?
https://stackoverflow.com/questions/10318744
复制相似问题