Tomcat服务启动一段时间后出现如下的异常

Connection was closed due to the following exception:

** BEGIN NESTED EXCEPTION **

java.sql.SQLException
MESSAGE: Communication link failure: java.io.EOFException, underlying cause: null

** BEGIN NESTED EXCEPTION **

java.io.EOFException

STACKTRACE:

java.io.EOFException
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1394)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1538)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1929)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:2251)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1586)
        at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
        at org.hibernate.loader.Loader.doQuery(Loader.java:662)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
        at org.hibernate.loader.Loader.doList(Loader.java:2145)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
        at org.hibernate.loader.Loader.list(Loader.java:2024)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
        at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
        at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
        at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:749)
        at com.lt.cms.hibernate.UsersDAO.findByAccount(UsersDAO.java:80)
        at com.lt.cms.service.UserService.check(UserService.java:13)
        at org.apache.jsp.service.check_jsp._jspService(check_jsp.java:61)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.lt.cms.filters.CharaterEncodingFilter.doFilter(CharaterEncodingFilter.java:54)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Unknown Source)
### 解决 Spring Boot 应用程序打包成 JAR 文件后长时间运行变得无响应的问题 当 Spring Boot 打包的应用程序作为 JAR 文件部署并运行一段时间之后可能出现对外部请求无响应的情况,这通常由多种潜在因素引起。内存泄漏是一个常见原因,在 Java 应用中如果对象被不必要地持有而导致垃圾回收器无法释放这些资源,则可能导致应用程序逐渐耗尽可用堆空间最终停止响应新来的 HTTP 请求[^1]。 另一个可能的原因在于线程池配置不当。默认情况下,Spring MVC 使用 Tomcat 作为嵌入式的 Servlet 容器来处理传入连接;Tomcat 的核心线程数和最大线程数设置不合理可能会造成高并发场景下新的客户端请求得不到及时处理而超时或者直接拒绝服务[^2]。 网络或 I/O 阻塞同样不容忽视。任何阻塞性操作都应异步执行以免影响主线程的工作效率。比如数据库查询、文件读写等长期等待外部资源的操作应当通过非阻塞方式实现或是交由专门的任务队列去完成从而避免拖累整个 Web Server 性能表现[^3]。 为了诊断具体问题所在可以采取如下措施: - 启动应用时增加 JVM 参数 `-XX:+HeapDumpOnOutOfMemoryError` 和 `-XX:HeapDumpPath=/path/to/dump.hprof` 来捕获发生 OOM 错误时刻的堆转储文件以便后续分析是否存在内存泄露现象; - 利用 `jstack` 工具获取当前进程内的所有Java线程栈跟踪信息进而判断是否有死锁状况亦或者是某些关键路径上出现了异常延迟; - 查看日志记录寻找蛛丝马迹,特别是那些级别较高(WARN, ERROR)的日志条目往往能够提供关于故障发生的线索。 最后值得注意的是,对于生产环境中的微服务架构而言实施监控报警机制至关重要。借助于Prometheus + Grafana这样的开源组合不仅可以实时掌握各实例健康状态而且能够在性能瓶颈初现端倪之际迅速定位根因并作出相应调整优化。 ```bash java -jar myapp.jar --server.port=8080 \ -Dlogging.level.org.springframework.web=DEBUG \ -XX:+HeapDumpOnOutOfMemoryError \ -XX:HeapDumpPath=/var/log/myapp/heapdump.hprof ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值