Linux 使用命令执行java -jar xxx.jar 在连接数据库时发生 java.sql.SQLRecoverableException: IO Error: Connection reset
Posted 衰草寒烟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 使用命令执行java -jar xxx.jar 在连接数据库时发生 java.sql.SQLRecoverableException: IO Error: Connection reset相关的知识,希望对你有一定的参考价值。
一、问题描述
1. jar 包在未打包之前执行没有问题
2.应用启动慢,并且此问题是一个偶尔性质的,也就是时有时无,
3.数据库连接数够用
4.发生错误的该连接是一个新的连接,不是服务端关闭导致的问题
二、问题原因
在Linux操作系统中,有一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器。
/dev/random
在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random的读操作将会被阻塞,直到从别的设备中收集到了足够的环境噪声为止。
当然你也可以设置成不堵塞,当你在open 的时候设置参数O_NONBLOCK, 但是当你read的时候,如果熵池空了,会返回-1
/dev/urandom
/dev/random的一个副本是/dev/urandom ("unlocked",非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。
三、问题解决
在JAVA中可以通过两种方式去设置指定的随机数发生器
1. -Djava.security.egd=file:/dev/random或者 -Djava.security.egd=file:/dev/urandom
2. 修改配置文件java.security 在jvm_homejrelibsecurity
参数securerandom.source=file:/dev/urandom
/dev/random 是堵塞的,在读取随机数的时候,当熵池值为空的时候会堵塞影响性能,尤其是系统大并发的生成随机数的时候,如果在随机数要求不高的情况下,可以去读取/dev/urandom
四、解决参考连接
以上是关于Linux 使用命令执行java -jar xxx.jar 在连接数据库时发生 java.sql.SQLRecoverableException: IO Error: Connection reset的主要内容,如果未能解决你的问题,请参考以下文章