【问题标题】:Address Bind exception in Tomcat解决 Tomcat 中的绑定异常
【发布时间】:2018-08-03 06:59:13
【问题描述】:

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

netstat -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 是在 windows 还是 linux 上运行?
  • 在windows上运行
  • 如果在 Windows 上运行,则杀死 Skype 进程,然后检查 tomcat
  • 系统没有安装skype
  • 可以分享一下最后10-15行tomcat日志吗>?

标签: java windows tomcat


【解决方案1】:

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

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

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

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

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

目前作为一种解决方法,我们在关闭服务时重新启动服务器 并每天晚上定期重启。但是由于问题不可靠发生在 每次关闭/重新启动,我们仅在确实需要时才重新启动服务器。为了实现这一点,我们使用我们在 server.xml 中实现和配置的监听器,它在 tomcat 服务启动后扫描 stderr.log。如果它检测到发生绑定异常,它会重新启动服务器(tomcat 服务自动安装)。如果您找到此问题的原因,请在此处发布,如果我或我们的 IT 人员会找到它,我会这样做。

8 月 7 日更新: 我们认为我们已经找到了根本原因。显然,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 文档的“此更新中的已知问题”部分中进行了描述。微软表示该问题已在 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 获得,它解决了这个错误,据我们所知,该问题不再存在。

【讨论】:

  • 我们也有 Windows Server 2012 R2,64 位,还安装了一些补丁(没有补丁号)。我们仍在调查此问题,尚未找到解决方法。
  • 这也解决了我们在不重启整个服务器的情况下无法重启 Jenkins(端口已经在使用)的问题。 (stackoverflow.com/questions/58234518)
  • 非常感谢。感谢这个答案,我们更新了 Windows 7,我们的问题得到了解决。
猜你喜欢
  • 1970-01-01
  • 2015-06-13
  • 2015-03-11
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
相关资源
最近更新 更多