在链接数据库时发生 java.sql.SQLRecoverableException: IO Error: Connection reset 错误

1、问题描述java

1. jar 包在未打包以前执行没有问题linux

2.应用启动慢,而且此问题是一个偶尔性质的,也就是时有时无,数据库

3.数据库链接数够用并发

4.发生错误的该链接是一个新的链接,不是服务端关闭致使的问题oracle

2、问题缘由dom

在Linux操做系统中,有一个特殊的设备文件,能够用做随机数发生器或伪随机数发生器。jvm

/dev/random性能

在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random的读操做将会被阻塞,直到从别的设备中收集到了足够的环境噪声为止。操作系统

固然你也能够设置成不堵塞,当你在open 的时候设置参数O_NONBLOCK, 可是当你read的时候,若是熵池空了,会返回-1.net

/dev/urandom

/dev/random的一个副本是/dev/urandom ("unlocked",非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操做不会产生阻塞,但其输出的熵可能小于/dev/random的。它能够做为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。

 

3、问题解决

在JAVA中能够经过两种方式去设置指定的随机数发生器

1.      -Djava.security.egd=file:/dev/random或者 -Djava.security.egd=file:/dev/urandom

2.      修改配置文件java.security 在jvm_home\jre\lib\security

参数securerandom.source=file:/dev/urandom

/dev/random 是堵塞的,在读取随机数的时候,当熵池值为空的时候会堵塞影响性能,尤为是系统大并发的生成随机数的时候,若是在随机数要求不高的状况下,能够去读取/dev/urandom

4、解决参考链接

oracle论坛

JDBC Connection Reset问题分析

java中的SecureRandom在linux中的实现

相关文章
相关标签/搜索