缘起
今天接到报案、tomcat和sts吵架吵得不可开交。发生一起老项目调试的时间段,在开发工具STS
中添加了tomcat容器,启动tomcat的时候报错了异常,8008端口无故躺枪、现场证据:timeout < 0
,基于此、本侦探打算亲自前往。
解决方案
严重: Failed to initialize end point associated with ProtocolHandler ["ajp-nio-8008"]
java.lang.IllegalArgumentException: timeout < 0
at java.base/sun.nio.ch.ServerSocketAdaptor.setSoTimeout(ServerSocketAdaptor.java:161)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:352)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:810)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:476)
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:871)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:581)
at org.apache.catalina.startup.Catalina.load(Catalina.java:604)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)
6月 22, 2021 10:22:50 上午 org.apache.catalina.core.StandardService initInternal
严重: Failed to initialize connector [Connector[AJP/1.3-8008]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[AJP/1.3-8008]]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
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:871)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:581)
at org.apache.catalina.startup.Catalina.load(Catalina.java:604)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
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.lang.IllegalArgumentException: timeout < 0
at java.base/sun.nio.ch.ServerSocketAdaptor.setSoTimeout(ServerSocketAdaptor.java:161)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:352)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:810)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:476)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
... 13 more
现场分析
详细询问了现场人员、以下是现场证词:
tomcat:我自己能正常启动,但是和STS合作后ajp就这样了。
STS:我用的东西都是tomcat给我的、他给我时候ajp就这样了。
java:看我做什么,我进来时候ajp已经躺枪了。
spring: 坐等吃瓜。
解决方案
经过本侦探总结如下:
问题并不是出现在项目上,根据java的证词,当时自己还没有进来(不加入项目依然显示此错误
)。
也不是出现在tomcat上面,因为和STS合作之前,ajp还是好好的(单独启动tomcat没报错
)。
当然STS也没用问题,他表示东西都是tomcat给他的(STS启动的tomcat只是引用了tomcat的配置文件
)。
那么真相只有一个:
Tomcat和STS的合作没有沟通好
!
知道了问题所在,那么本侦探也开始解救躺枪的ajp,找到server.xml
,在屁股(Connector
)上注射了一针迟缓剂(connectionTimeout="20000"
),如下图:
<Connector connectionTimeout="20000" port="8008" protocol="AJP/1.3" redirectPort="8443"/>
由此,tomcat与STS握手言和。网站大家庭又过上了幸福美满的生活。
注
最近太忙没太多时间写文章、这次刚想搞点东西,发现网站改版了、有点小意外,差点找不到家,哈哈哈。