问题:
linux下执行java程序时偶尔会有connection reset报错
分析:
Oracle的JDBC driver程序里面在获取db连接的时候用到了java的SecureRandom,来获取随机字节数据流,用来产生随机数,-Djava.security.egd配置的就是随机数据收集伪设备,linux下有两种:
1./dev/random,利用系统中断来生成随机数据,所以当系统不是很繁忙的时候,中断数很少,那么调用进程就会进入等待状态,直到有足够用的中断数的时候,才会返回随机数,而这时可能已经发生getConnection超时了
2./dev/urandom,不利用系统中断来生成随机数,所以不会造成调用进程等待
所以,我们的遇到的情况必须使用urandom才行,由于java的bug,即使指定file:/dev/urandom,SecureRandom使用的仍然是random,为了绕过这个bug,我们发现了「-Djava.security.egd=file:/dev/./urandom」这种配置方式,来达到我们使用urandom的目的.
解决方案:
1. 查找当前java的安装路径
ls -lrt /usr/bin/java
ls -lrt /etc/alternatives/java 找到java路径
2.将$JAVA_HOME/jre/lib/security/Java.security内,将securerandom.source的内容改为file:/dev/./urandom即可
注意:
cat /dev/random | od -x ----查看屏幕输出随机数的速度
cat /proc/sys/kernel/random/entropy_avail ----查看当前熵值,如果速度在2500以下基本判定就是有问题的。
相关推荐
解决oracle数据库发生'Connection reset by peer' or 'Connection reset'的错误 这边的数据库连接是kettle自带的h2数据库,只要有kettle就有这个数据库,目录位于data-integration\samples\db\,连接方式是 ...
在linux上通过JDBC连接ORACLE 时总是出现 java.sql.SQLRecoverableException: IO Error: Connection reset 的问题
**1.2 Connectionreset异常解决办法** 问题描述:在网络编程中经常会遇到`Connection reset`异常,尤其是在高并发环境下。 **解决方法:** - 修改系统内核参数`net.core.somaxconn`,增加其值可以提高并发连接数。...
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection(url, "zwjx", "zwjx"); // 报表参数 String projectapproid = request.getParameter("projectapproid"); ...
在这个JSP页面中,首先加载Oracle JDBC驱动,然后通过`DriverManager.getConnection()`建立数据库连接。接下来,构造SQL插入语句,获取表单中的ID和图片文件路径。使用`FileInputStream`读取文件,然后通过`...
public static final String DBDRIVER = "oracle.jdbc.OracleDriver"; public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:xe"; public static final String DBUSER = "your_username"; ...