使用SSL方式建连报错或阻塞
问题现象
JDBC使用SSL方式建立连接时,会在客户端获取强随机数,建立连接过程中可能出现以下现象:
场景1:如果连接串中配置了loginTimeout,可能会报Connection attempt timed out。
场景2:如果连接串中不配置loginTimeout,可能会建连阻塞,通过JDK命令jstack <pid>查询到的阻塞栈如下图所示。

原因分析
客户端环境随机数产生的速度太慢,无法满足产品要求,熵源不足,导致服务启动失败。当前已知在一些Linux环境中存在此问题。
处理方法
方法1:启动客户端环境中的haveged服务,增加系统熵池熵值以提高读取随机数的速度。启动命令为:
systemctl start haveged
方法2:调整客户端jdk配置。
打开$JAVA_PATH/jre/lib/security/java.security文件,修改以下两个配置项:
securerandom.source=file:/dev/./urandom securerandom.strongAlgorithms=NativePRNGNonBlocking:SUN
方法2的本质是在获取强随机数时,使用伪随机数代替,减少需要消耗的熵值。会影响客户端所有使用该jdk的应用,在获取强随机数时会使用伪随机数代替。