Наш веб-сервис Spring Boot продолжает умирать и получать типичные ошибки, когда клиент пытается подключиться через сотовую связь с ОЧЕНЬ высокой задержкой - PullRequest
0 голосов
/ 07 октября 2019

Как видно из названия, у нас есть веб-сервис Spring Boot (v2.1.2.RELEASE). Всякий раз, когда клиент пытается отправить в веб-службу «большой» объем данных (около 20 МБ) через POST, 99% времени данные никогда не проходят.

Соединение клиентов с нашим серверомидет из области с плохим приемом ячеек с использованием точки доступа Verizon.

Dell Computer (WiFi) -> Verizon HotSpot -> [ internet ] -> Our Dell Server (ethernet)

Кажется, мы получаем две разные ошибки:

o.a.c.c.C.[.[localhost] [DirectJDKLog.java:175] Exception Processing ErrorPage[errorCode=0, location=/error]
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Unable to wrap data, invalid status [CLOSED]
...
Caused by: java.io.IOException: Unable to wrap data, invalid status [CLOSED]
    at org.apache.tomcat.util.net.SecureNioChannel.write(SecureNioChannel.java:670)
    at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)
    at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:144)
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1225)
    at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:743)
    at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:513)
    at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:451)
    at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:530)
    at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:73)
    at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:189)
    at org.apache.coyote.Response.doWrite(Response.java:599)
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:328)

и

ERROR [https-jsse-nio-8443-exec-7] o.a.c.c.C.[.[localhost] [DirectJDKLog.java:175] Exception Processing ErrorPage[errorCode=0, location=/error]
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
...
Caused by: java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)    
    at sun.nio.ch.IOUtil.write(IOUtil.java:65)            
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
    at org.apache.tomcat.util.net.SecureNioChannel.flush(SecureNioChannel.java:144)
    at org.apache.tomcat.util.net.SecureNioChannel.write(SecureNioChannel.java:674)
    at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)
    at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:144)
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1225)
    at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:743)
    at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:513)
    at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:451)
    at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:530)
    at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:73)
    at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:189)
    at org.apache.coyote.Response.doWrite(Response.java:599)      
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:328)

Мы пытались увеличить время ожидания для веб-службы, чтобы посмотреть, поможет ли это, но, похоже, это не помогло. Это то, что находится в наших application.properties :

server.port=8443
server.ssl.key-store=[SOME STUFF HERE]
server.ssl.key-store-password=[SOME STUFF HERE]
server.ssl.key-store-type=[SOME STUFF HERE]
server.ssl.key-alias=tomcat_OURAPP
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://[IP_ADDRESS]:3306/[OURDB]?createDatabaseIfNotExist=true&serverTimezone=UTC
spring.datasource.username=[USERNAME]
spring.datasource.password=[PASSWORD]
spring.datasource.initialization-mode=always
spring.datasource.data=classpath:data.sql
spring.datasource.tomcat.testWhileIdle=true
spring.datasource.tomcat.timeBetweenEvictionRunsMillis=60000
spring.datasource.tomcat.validationQuery=SELECT 1

server.tomcat.accesslog.enabled=true

# This sets the timeout to the db server.
spring.datasource.hikari.connection-timeout=500000

# This overrides the default "white label" error messages that come with Spring Boot.
server.error.whitelabel.enabled=false 

# This sets the connection timeout to infinity.
server.connection-timeout=-1

РЕДАКТИРОВАТЬ:

Мы также получаем эти ошибки в журнале веб-службы:

DEBUG [HikariPool-1 connection closer] c.z.h.p.PoolBase [PoolBase.java:129] HikariPool-1 - Closing connection com.mysql.cj.jdbc.ConnectionImpl@xxxxxxxx: (connection has passed maxLifetime)
DEBUG [HikariPool-1 connection adder] c.z.h.p.HikariPool [HikariPool.java:709] HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@xxxxxxxx
DEBUG [HikariPool-1 housekeeper] c.z.h.p.HikariPool [HikariPool.java:411] HikariPool-1 - Pool stats (total=10, active=0, idle=10, waiting=0)
...