[英]java.io.EOFException at org.apache.tomcat.util.net.NioEndpoint (tomcat 9 & openjdk 8)
我正在為一個項目升級 tomcat 和 openjdk 版本。 目標:Tomcat 9.0.63 和 openjdk-8u322-b06。
但是,在使用 Tomcat 9.0.63 和 openjdk-8u322-b06 時出現 EOFException。
我不知道如何解決它。
如果使用 Tomcat 9.0,則會出現錯誤。 63和 openjdk-8u 252 -b09或更高版本。
如果使用 Tomcat 9.0,則不會出現錯誤。 35和openjdk-8u 322 -b06。
如果使用 Tomcat 9.0,則不會出現錯誤。 63和 openjdk-8u 242 -b08或以前的版本。
[https-jsse-nio-443-exec-2] org.apache.coyote.http2.Http2AsyncParser$FrameCompletionHandler.failed Connection [1], Stream [0], Frame type [null], Error
java.io.EOFException
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1659)
at org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:1068)
at org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1487)
at org.apache.tomcat.util.net.SocketWrapperBase.read(SocketWrapperBase.java:1330)
at org.apache.tomcat.util.net.SocketWrapperBase.read(SocketWrapperBase.java:1302)
at org.apache.coyote.http2.Http2AsyncParser.readConnectionPreface(Http2AsyncParser.java:55)
at org.apache.coyote.http2.Http2UpgradeHandler.init(Http2UpgradeHandler.java:253)
at org.apache.coyote.http2.Http2AsyncUpgradeHandler.init(Http2AsyncUpgradeHandler.java:41)
at org.apache.coyote.http2.Http2UpgradeHandler.upgradeDispatch(Http2UpgradeHandler.java:328)
at org.apache.coyote.http2.Http2AsyncUpgradeHandler.upgradeDispatch(Http2AsyncUpgradeHandler.java:41)
at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:59)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Tomcat 服務器.xml
<Connector port="9443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="150" scheme="https" secure="true" clientAuth="false"
compression="on" compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml"
sslProtocol="TLS"
sslEnabledProtocols="TLSv1.2"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA"
keystoreFile="path" keystorePass="xxxx">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>
端口 443
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="150" scheme="https" secure="true" clientAuth="false"
compression="on" compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml"
sslProtocol="TLS"
sslEnabledProtocols="TLSv1.2"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA"
keystoreFile="path" keystorePass="xxxx">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>
端口 8080
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="9443"
useBodyEncodingForURI="true" />
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"
useBodyEncodingForURI="true" />
解決了。 Tomcat 9.0.36+ 和 openjdk 8_252+ 不能同時支持 http2 和 NioProtocol。 必須使用 apr protocol="org.apache.coyote.http11.Http11AprProtocol" 並更改 server.xml
<Connector port="9443" protocol="org.apache.coyote.http11.Http11AprProtocol"
SSLEnabled="true" scheme="https" secure="true"
maxThreads="150"
compression="on" compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig protocols="TLSv1.2,+TLSv1.1" certificateVerification="none">
<Certificate certificateKeystoreFile="xxx.keystore"
certificateKeystorePassword="xxx"
type="RSA" />
</SSLHostConfig>
</Connector>
如果使用protocol="org.apache.coyote.http11.Http11NioProtocol",需要去掉<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
,不會報錯,只是http1.1。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.