Назад | Перейти на главную страницу

Tomcat показывает NoSuchMethodError для Nio2Endpoint.setSocketOptions после начала обслуживания

Я только что обновил сервер, на котором после запуска приложения началось исключение и tomcat начал обслуживать запросы.

Я изменил соединение, чтобы проверить, была ли проблема с ним, но произошло то же самое:

    19-Apr-2018 20:31:38.833 SEVERE [http-nio2-8080-Acceptor-0] org.apache.tomcat.util.net.Nio2Endpoint.setSocketOptions java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer;
    at org.apache.tomcat.util.net.SocketBufferHandler.reset(SocketBufferHandler.java:146)
    at org.apache.tomcat.util.net.Nio2Channel.reset(Nio2Channel.java:58)
    at org.apache.tomcat.util.net.Nio2Endpoint.setSocketOptions(Nio2Endpoint.java:317)
    at org.apache.tomcat.util.net.Nio2Endpoint$Acceptor.run(Nio2Endpoint.java:454)
    at java.lang.Thread.run(Thread.java:748)

Это приложение - java8, работающее на tomcat 8.5.30 debian с этой конфигурацией коннектора

<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" executor="tomcatThreadPool"
                   URIEncoding="UTF-8" connectionTimeout="15000" disableUploadTimeout="false"
                   connectionUploadTimeout="60000" maxHttpHeaderSize="16384" acceptCount="1000">
     <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
</Connector>

Со штатным коннектором 1.1

SEVERE [catalina-exec-44] 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)

Хорошо, проблема была вызвана обновлением Debian, которое не было подготовлено для jdk 8. Однако они работают над исправлением.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895866