记录一次connection reset 错误的解决全过程

 更新时间:2023年04月29日 10:18:04   作者:不打拉东  
这篇文章主要介绍了记录一次connection reset 错误的解决全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

前言

关于java.net.SocketException: Connection reset,是由于程序的某些异常导致套接字主动关闭,异常原因就太多,比如数据源出现故障,网络故障等,所以这里没有标准的答案。

本地调试正常,部署多台,就其中一台失败,提示connection reset 描述也比较模糊,造成错误的原因比较多,我先给出我这里的解决方案,仅供尝试,有效可以回来点个赞,无效但有其它解决可以回来评论一下供他人参考

我这里最终的解决方案是在启动jar时 添加 -Djava.security.egd=file:/dev/./urandom 如下

 java -jar -Xms2g -Mmx2g -Djava.security.egd=file:/dev/./urandom   /data/kuizii.jar

追其原因

tomcat在生成sessionId时底里生成随时数的算法选用了堵塞式 /dev/random算法,当连接

jvm随机数算法选用不当导致tomcat的SessionID生成非常慢的情况,使用了-Djava.security.egd=file:/dev/./urandom就可以避免。

排查过程

背景

我的开发环境为springboot 2.1.5 +oracle 11g+ druid ,数据库驱动是oracle.jdbc.OracleDriver.

这一次遇到 一个很偶现的问题,在部署jar包到某一台linux时总会时不时提示以下错误,然尔在其它开发机以及其它linux服务器均正常。

错误提示如下:

2020-07-27 18:09:41.673  INFO 18397 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8086 (http)
2020-07-27 18:09:41.759  INFO 18397 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-07-27 18:09:41.759  INFO 18397 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.19]
2020-07-27 18:09:42.026  INFO 18397 --- [           main] o.a.c.c.C.[.[localhost].[/scserver]      : Initializing Spring embedded WebApplicationContext
2020-07-27 18:09:42.026  INFO 18397 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 9074 ms
2020-07-27 18:09:43.811  INFO 18397 --- [           main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
2020-07-27 18:11:16.805 ERROR 18397 --- [           main] com.alibaba.druid.pool.DruidDataSource   : init datasource error, url: jdbc:oracle:thin:@192.168.1.42:1521:orcl

java.sql.SQLRecoverableException: IO 错误: Connection reset
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:498) ~[ojdbc6-11.2.0.4.0-atlassian-hosted.jar!/:11.2.0.4.0]
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553) ~[ojdbc6-11.2.0.4.0-atlassian-hosted.jar!/:11.2.0.4.0]
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254) ~[ojdbc6-11.2.0.4.0-atlassian-hosted.jar!/:11.2.0.4.0]
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) ~[ojdbc6-11.2.0.4.0-atlassian-hosted.jar!/:11.2.0.4.0]
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528) ~[ojdbc6-11.2.0.4.0-atlassian-hosted.jar!/:11.2.0.4.0]
    at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.1.23.jar!/:1.1.23]
    at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.1.23.jar!/:1.1.23]
    at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.1.23.jar!/:1.1.23]
    at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218) ~[druid-1.1.23.jar!/:1.1.23]
    at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.1.23.jar!/:1.1.23]
    at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1646) ~[druid-1.1.23.jar!/:1.1.23]
    at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1710) ~[druid-1.1.23.jar!/:1.1.23]
    at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:912) ~[druid-1.1.23.jar!/:1.1.23]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_252]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_252]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_252]

看到上面错误 ,肯定优先考虑到是数据库连接的问题,于是做了以下尝试

  • 1.查看连接字符串是否有效 (检查没问题,跳过)
  • 2.调整spring.datasource.driver 将目前的oracle.jdbc.OracleDriver 切换为过时的驱动oracle.jdbc.driver.OracleDriver
  • 3.从错误中可以看到是 oracle.jdbc.driver.OracleDriver这个驱动报错,那么尝试再将spring.datasource.druid.driver-class-name设置为 oracle.jdbc.OracleDriver
  • 4.可能是druid的原因造成,去除druid依赖再尝试,仍未解决

经过上述尝试后,问题依旧。百度众多,其中这篇文章得知以下方法可以解决,尝试之后,果真可以。

在启动jar时 添加 -Djava.security.egd=file:/dev/./urandom 如下

 java -jar -Xms2g -Mmx2g -Djava.security.egd=file:/dev/./urandom   /data/kuizii.jar

造成该错误的原因,比如数据源问题,启动中其它错误也用导致提示这个错误,解决方案并非适用所有人。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决springcloud阿里云OSS文件访问跨域问题的实现

    解决springcloud阿里云OSS文件访问跨域问题的实现

    本文主要介绍了解决springcloud阿里云OSS文件访问跨域问题的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • mybatis嵌套循环map方式(高级用法)

    mybatis嵌套循环map方式(高级用法)

    这篇文章主要介绍了mybatis嵌套循环map方式(高级用法),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • java实现微信退款功能

    java实现微信退款功能

    这篇文章主要为大家详细介绍了java实现微信退款功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • System.getProperty(user.dir)定位问题解析

    System.getProperty(user.dir)定位问题解析

    System.getProperty(user.dir) 获取的是启动项目的容器位置,用IDEA是项目的根目录,部署在tomcat上是tomcat的启动路径,即tomcat/bin的位置,这篇文章主要介绍了System.getProperty(user.dir)定位问题,需要的朋友可以参考下
    2023-05-05
  • SpringBoot快速设置拦截器并实现权限验证的方法

    SpringBoot快速设置拦截器并实现权限验证的方法

    本篇文章主要介绍了SpringBoot快速设置拦截器并实现权限验证的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Java从零实现超市会员管理系统

    Java从零实现超市会员管理系统

    这篇文章主要为大家详细介绍了Java实现超市会员管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-12-12
  • 解决Mybatis-Plus更新方法不更新NULL字段的问题

    解决Mybatis-Plus更新方法不更新NULL字段的问题

    这篇文章主要介绍了解决Mybatis-Plus更新方法不更新NULL字段的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 在IntelliJ IDEA中创建和运行java/scala/spark程序的方法

    在IntelliJ IDEA中创建和运行java/scala/spark程序的方法

    这篇文章主要介绍了在IntelliJ IDEA中创建和运行java/scala/spark程序的教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Java swing实现应用程序对数据库的访问问题

    Java swing实现应用程序对数据库的访问问题

    这篇文章主要介绍了Java swing实现应用程序对数据库的访问,本次实验需要做一个GUI界面和一个连接查询功能,在论坛上借鉴了其他大佬获取网站内容的部分代码,然后自己做了一个及其简陋的swing界面,算是把这个实验完成了,需要的朋友可以参考下
    2022-09-09
  • 使用Sharding-JDBC对数据进行分片处理详解

    使用Sharding-JDBC对数据进行分片处理详解

    这篇文章主要介绍了使用Sharding-JDBC对数据进行分片处理详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论