首页 » 开发语言 » Troubleshooting JDBC(JVM) connection timeout (java.security.egd)

Troubleshooting JDBC(JVM) connection timeout (java.security.egd)

同事遇到的一个jdbc的应用在执行sql时出现间断性超时错误, strace时会显示 etimedout (connection timed out) 的字样, 网络抓包存在回包延迟现象,最后应用的配置了java.security.egd JVM选项, 问题得到解决, 这个问题原理不是很理解, 也需要是JVM 生成随机端口调用时出现了延迟(just I guess). 简单记录

Avoiding JVM delays caused by random number generation 记录对于UNIX平台,默认情况下,Oracle JVM中用于随机数生成的库依赖于/ dev / random。这可能会阻止WebLogic Server进程,因为在某些操作系统上,/ dev / random在返回结果之前会等待主机上生成一定量的“噪声”。尽管/ dev / random更安全,但是如果默认的JVM配置延迟了WebLogic Server的启动,建议使用/ dev / urandom。

编辑$JAVA_HOME/jre/lib/security/java.security 配置 “java.security.egd” :
-D java.security.egd=file:/dev/./urandom

如果java应用程序使用java.security.SecureRandom 出现hang, 尝试添加系统属性-Djava.security。使用/dev/urandom代替/dev/randomdom。但在Java 6和Java 7中,该设置似乎不起作用。

解决方法:
Specify -Djava.security.egd=file:/dev/./urandom instead of -Djava.security.egd=file:/dev/urandom
— or —
Upgrade to Java 8

当我们设置java.security.egd JVM属性时,安全提供程序可以使用它来覆盖securerandom.source中配置的属性

一起,java.security.egdsecurerandom.source其中控制熵收集设备,当我们使用(EGD)将用作种子数据的主要来源的SecureRandom来产生随机数。

打赏

对不起,这篇文章暂时关闭评论。