tomcat8 使用 stock http - 读取请求时出错,已忽略
tomcat8 using stock http - Error reading request, ignored
stock ubuntu 18 在 digitalocean VM 上,stock jdk & tomcat,stock server.xml:
每次 http 客户端尝试连接时都会得到这个(我在尝试使用 https 时遇到其他错误,所以尝试恢复到 http 并现在得到这个)
系统版本:
09-May-2018 00:04:50.923 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.30 (Ubuntu)
09-May-2018 00:04:50.927 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Apr 19 2018 11:53:19 UTC
09-May-2018 00:04:50.928 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.5.30.0
09-May-2018 00:04:50.928 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
09-May-2018 00:04:50.929 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.15.0-20-generic
09-May-2018 00:04:50.929 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
09-May-2018 00:04:50.929 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-8-openjdk-amd64/jre
09-May-2018 00:04:50.929 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_162-8u162-b12-1-b12
错误如下:
09-May-2018 00:05:04.300 SEVERE [http-nio-8080-exec-1] org.apache.coyote.AbstractProtocol$ConnectionHandler.process Error reading request, ignored
java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer;
at org.apache.coyote.http11.Http11InputBuffer.init(Http11InputBuffer.java:688)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:672)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
09-May-2018 00:05:04.303 SEVERE [http-nio-8080-exec-1] org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun
java.lang.NoSuchMethodError: java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer;
at org.apache.coyote.http11.Http11InputBuffer.recycle(Http11InputBuffer.java:280)
at org.apache.coyote.http11.Http11Processor.recycle(Http11Processor.java:1709)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.release(AbstractProtocol.java:972)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:940)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
这里是 server.xml 部分(同样,generic/stock)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
google 似乎对此一无所知?
似乎是同一个问题:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895866
This issue happens because
tomcat8/8.5.30-1 was built with OpenJDK 9 and can no longer run with
OpenJDK 8 due to the use of new java.nio.ByteBuffer methods.If you
switch to OpenJDK 9 to run Tomcat the issue should go away. I'll make tomcat8 runnable again with OpenJDK 8 in the next update.
Tomcat 8.5.31 已经 released but hasn't made its way in the ubuntu 包。
stock ubuntu 18 在 digitalocean VM 上,stock jdk & tomcat,stock server.xml: 每次 http 客户端尝试连接时都会得到这个(我在尝试使用 https 时遇到其他错误,所以尝试恢复到 http 并现在得到这个)
系统版本:
09-May-2018 00:04:50.923 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.30 (Ubuntu)
09-May-2018 00:04:50.927 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Apr 19 2018 11:53:19 UTC
09-May-2018 00:04:50.928 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.5.30.0
09-May-2018 00:04:50.928 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
09-May-2018 00:04:50.929 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.15.0-20-generic
09-May-2018 00:04:50.929 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
09-May-2018 00:04:50.929 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-8-openjdk-amd64/jre
09-May-2018 00:04:50.929 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_162-8u162-b12-1-b12
错误如下:
09-May-2018 00:05:04.300 SEVERE [http-nio-8080-exec-1] org.apache.coyote.AbstractProtocol$ConnectionHandler.process Error reading request, ignored
java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer;
at org.apache.coyote.http11.Http11InputBuffer.init(Http11InputBuffer.java:688)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:672)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
09-May-2018 00:05:04.303 SEVERE [http-nio-8080-exec-1] org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun
java.lang.NoSuchMethodError: java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer;
at org.apache.coyote.http11.Http11InputBuffer.recycle(Http11InputBuffer.java:280)
at org.apache.coyote.http11.Http11Processor.recycle(Http11Processor.java:1709)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.release(AbstractProtocol.java:972)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:940)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
这里是 server.xml 部分(同样,generic/stock)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
google 似乎对此一无所知?
似乎是同一个问题:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895866
This issue happens because tomcat8/8.5.30-1 was built with OpenJDK 9 and can no longer run with OpenJDK 8 due to the use of new java.nio.ByteBuffer methods.If you switch to OpenJDK 9 to run Tomcat the issue should go away. I'll make tomcat8 runnable again with OpenJDK 8 in the next update.
Tomcat 8.5.31 已经 released but hasn't made its way in the ubuntu 包。