java - 解决Tomcat中的Bind异常

标签 java windows tomcat

自 1 年以来,我们一直在 Apache Tomcat 8.0.36 服务器上运行 Java 8 Web 应用程序。 从过去几天开始,有时当我们重新启动 Tomcat 服务器时,应用程序无法运行。日志显示 Https 端口的地址绑定(bind)异常。 我尝试在 cmd 中使用以下命令检查与端口关联的进程:

网络统计-aon | findstr [端口]

但它没有显示与该端口关联的任何进程。

我试过从任务管理器关闭 tomcat 进程,也尝试执行 tomact shutdown.bat 然后再次启动 tomcat,但没有任何帮助。

如果在部署应用程序的地方重新启动系统,问题会得到解决,但我们无法随时重新启动系统

请帮助可能是什么问题,还有什么可以检查?

下面是tomcat错误日志中的错误:

03-Aug-2018 11:42:32.008 INFO [main] org.apache.coyote.AbstractProtocol.init 
Initializing ProtocolHandler ["http-nio-443"]
03-Aug-2018 11:42:32.008 SEVERE [main] 
org.apache.coyote.AbstractProtocol.init Failed to initialize end point 
associated with ProtocolHandler ["http-nio-443"]
java.net.BindException: Address already in use: bind
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:351)
at 
org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:748)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:459)
at 
org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11Jss
eProtocol.java:120)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardService.initInternal
(StandardService.java:568)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at  org.apache.catalina.core.StandardServer.initInternal
 (StandardServer.java:869)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:580)
at org.apache.catalina.startup.Catalina.load(Catalina.java:603)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)

03-Aug-2018 11:42:32.008 SEVERE [main] 
 org.apache.catalina.core.StandardService.initInternal Failed to initialize 
 connector [Connector[HTTP/1.1-443]]
 org.apache.catalina.LifecycleException: Failed to initialize component 
[Connector[HTTP/1.1-443]]
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
 at org.apache.catalina.core.StandardService.initInternal
(StandardService.java:568)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal
(StandardServer.java:869)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:580)
at org.apache.catalina.startup.Catalina.load(Catalina.java:603)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)
Caused by: org.apache.catalina.LifecycleException: Protocol handler 
initialization failed
at org.apache.catalina.connector.Connector.initInternal(Connector.java:962)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
... 12 more
Caused by: java.net.BindException: Address already in use: bind
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:351)
at 
org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:748)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:459)
at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init
(AbstractHttp11JsseProtocol.java:120)
 at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
 ... 13 more03-Aug-2018 11:42:32.008 INFO [main] 
org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http- 
nio-443"]
03-Aug-2018 11:42:32.008 SEVERE [main] 
org.apache.coyote.AbstractProtocol.init 
Failed to initialize end point associated with ProtocolHandler ["http-nio- 
443"]
java.net.BindException: Address already in use: bind
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:351)
at org.apache.tomcat.util.net.AbstractEndpoint.init
(AbstractEndpoint.java:748)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:459)
at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init
(AbstractHttp11JsseProto col.java:120)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardService.initInternal
(StandardService.java:568)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal
(StandardServer.java:869)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:580)
at org.apache.catalina.startup.Catalina.load(Catalina.java:603)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)

03-Aug-2018 11:42:32.008 SEVERE [main] 
org.apache.catalina.core.StandardService.initInternal Failed to initialize 
connector [Connector[HTTP/1.1-443]]
org.apache.catalina.LifecycleException: Failed to initialize component 
[Connector[HTTP/1.1-443]]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
at org.apache.catalina.core.StandardService.initInternal
(StandardService.java:568)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal
(StandardServer.java:869)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:580)
at org.apache.catalina.startup.Catalina.load(Catalina.java:603)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)
Caused by: org.apache.catalina.LifecycleException: Protocol handler 
initialization failed
at org.apache.catalina.connector.Connector.initInternal(Connector.java:962)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
... 12 more
Caused by: java.net.BindException: Address already in use: bind
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:351)
at org.apache.tomcat.util.net.AbstractEndpoint.init
(AbstractEndpoint.java:748)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:459)
at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init
(AbstractHttp11JsseProtocol.java:120)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
... 13 more

最佳答案

请参阅下面的更新。我们认为我们已经找到了根本原因和解决方案

我们遇到了同样的问题:一个运行了将近一年没有问题的tomcat服务在停止并重新启动后无法绑定(bind)到它使用的端口。

我们通常每天晚上定期停止并重新启动我们的 tomcat 服务,它曾经可以正常工作。该问题首次出现在 7 月 24 日,因此在我和我们的 IT 部门进行了大量研究之后,我怀疑是在 7 月 24 日之前不久我们的 IT 基础设施发生了某种变化导致了这个问题。

我们的服务器是 Windows Server 2012 R2,64 位,但我们的 IT 环境是虚拟化的,运行在 vSphere Host Version 6 上。您的 tomcat 在什么服务器/基础架构上运行?它是虚拟化系统还是在物理服务器上运行?

在我看来,问题出在最后安装的 Windows 补丁上 (KB4338815 和/或 KB4339093)或一些管理程序更新。但我们的 IT 仍在研究中。

目前,作为解决方法,我们在关闭服务时重新启动服务器 并每晚定时重启。但是因为不可靠的问题发生在 每次关闭/重新启动时,我们仅在确实有必要时才重新启动服务器。为实现这一点,我们使用我们在 server.xml 中实现和配置的监听器,它会在 tomcat 服务启动后立即扫描 stderr.log。如果它检测到发生绑定(bind)异常,它会重新启动服务器(tomcat 服务是自动安装的)。如果您找到此问题的原因,请将其张贴在这里,如果我或我们的 IT 人员能够找到的话,我也会这样做。

8 月 7 日更新: 我们认为我们已经找到了根本原因。显然,七月份的 Windows 质量月度汇总介绍了这个问题。在我们的案例中(Windows Server 2012 R2,64 位),有问题的更新是 KB4338815(请参阅 https://support.microsoft.com/en-us/help/4338815/windows-81-update-kb4338815)。

如果您在 Internet 上进行快速研究,也会影响 Windows IIS Webserver 和 MS SQL Server 的问题主要被描述为与 KB4338818 有关(请参阅 https://support.microsoft.com/en-us/help/4338818/windows-7-update-kb4338818),但这与 Windows Server 的更新类型相同2008 R2 和 Windows 7。

Microsoft 已经意识到该问题,并在其 KB4338815 和 KB4338818 文档中提到的文章的“此更新中的已知问题”部分对其进行了描述。 Microsoft 声明该问题已在 KB4338831(适用于 Windows Server 2012 R2、Windows 8.1)和 KB4338821(适用于 Windows Server 2008 R2、Windows 7)中得到解决

在我们的例子中,我们安装了热修复程序 KB4345424(参见 https://support.microsoft.com/en-us/help/4345424/improvements-and-fixes-windows-8-1-and-server-2012-r2),它也可从 Microsoft 获得,它解决了这个错误,据我们所知,这个问题不再存在。

关于java - 解决Tomcat中的Bind异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51666952/

相关文章:

java - 使用 Java 8 Streams API,在调用 Collectors.toSet() 时是否可以依赖 sorted()?

JAVA_HOME 应该指向 JDK 而不是 JRE

linux - 局域网病毒传播技术

windows - 如何为 Windows 操作系统中 tomcat 中托管的应用程序生成 SSL 证书-非自签名

java - 尽管异常,DBunit 仍插入 xml

java - 为什么 REST Web 服务不支持 war 之外的 EJB 资源类?

java - 在自定义控制台上监听打印文本事件?

windows - 使用 Strawberry(可移植)Perl(适用于 Windows 7)安装 Mechanize 时遇到问题

html - 图片不显示 html css

tomcat - Websphere 中的 webcontainer 与 tomcat 服务器