gpt4 book ai didi

java - 在 docker 容器中几分钟后重置 Spring Boot 连接

转载 作者:行者123 更新时间:2023-12-03 17:38:37 33 4
gpt4 key购买 nike

后端在 docker 容器中运行。它与 Spring Boot 和安全性一起运行并且工作正常。前端也在另一个容器中运行。一切正常,直到突然抛出此异常。我只是在闲置几分钟后才注意到这个异常(通常在 5 到 10 分钟之间)。

WARN 1 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08S01
ERROR 1 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : I/O Error: Connection reset
ERROR 1 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: could not extract ResultSet; nested exception is org.hibernate.exception.JDBCConnectionException: could not extract ResultSet] with root cause

java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:209) ~[na:1.8.0_111-internal] at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_111-internal] at java.io.DataInputStream.readFully(DataInputStream.java:195) ~[na:1.8.0_111-internal]
.....



与数据库的连接始终可用。奇怪的是,只有当我使用 docker 运行我的项目时才会抛出这个错误。如果我使用 eclipse 和 node.js 运行它,则不会发生错误。我唯一注意到的是,在我登录并闲置几分钟后,当我尝试做某事时会自动退出。我不知道这是否与原始错误有任何关系。

应用程序属性
spring.datasource.url=databaseURL
spring.datasource.username=SQLusername
spring.datasource.password=Password
spring.datasource.driver-class-name=net.sourceforge.jtds.jdbc.Driver
spring.datasource.initialSize=100
spring.datasource.minIdle=10

spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

spring.datasource.tomcat.max-active=250
spring.datasource.tomcat.max-wait=30000
spring.datasource.test-on-borrow=true
spring.datasource.test-while-idle=true
spring.datasource.minEvictableIdleTimeMillis=21600000
spring.datasource.timeBetweenEvictionRunsMillis=43200000


spring.datasource.connection-test-query=SELECT 1
spring.datasource.validationQuery=SELECT 1

我很高兴每一个可以帮助解决这个问题的建议。

最佳答案

几个月前我遇到了同样的问题!
发生这种情况是因为 jvm 没有足够的内存来接受这个请求!
此错误是间歇性的,很难找到根本原因!
尝试这个:
在你的 Dockerfile 中加入一些标志来解决它

ENTRYPOINT ["java","-XX:+TieredCompilation","-XX:TieredStopAtLevel=1", "-jar","yourJar.jar"]
更多详情: https://jpbempel.github.io/2020/05/22/startup-containers-tieredcompilation.html
有时问题可能是内存。当您使用 java 启动容器时,jvm 默认堆内存是容器总内存的 1/4。
然后你可以使用标志 -XX:MaxRAMFraction 您的值的范围为 1 到 4。
更多详情: https://merikan.com/2019/04/jvm-in-a-container/#java-8u131-and-java-9
祝你好运!

关于java - 在 docker 容器中几分钟后重置 Spring Boot 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41983989/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com