今天内网linux服务器中部署了一个java的web应用程序,连接已有其他服务器上的oracle数据库报错,telnet 1521端口也是通的,那证明数据库是没问题。

经过oracle官网及网络上的查询情况主要分两种情况:

1)random 生成的随机值不够,大致就是连接oracle数据库时需要从随机熵池中取随机数,而这熵池就是 /dev/random这个文件产生的。而这个文件是阻塞产生熵值的,会导致连接阻塞。 2)未在 /etc/hosts文件中添加 本机主机名和IP的映射,且没有dns域名解析有可能会导致获取连接的时间太久。  

于是网上查询,总结下解决过程及思路:

1、检查主机名配置:

查询主机的hostname,在 /etc/hosts文件中添加ip与主机名的映射关系:

192.168.0.1 hostname

2、检查应用启动时参数:

1)检查JVM环境,$JAVA_HOME/jre/lib/security路径下的java.security文件配置信息:

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

2)检查tomcat环境,tomcat/bin/catalina.sh中加入这么一行:

-Djava.security.egd=file:/dev/./urandom

然而,1/2配置都是没有问题的,所以解决不了问题!!

3、继续查找原因,有博客提到linux的熵值影响

检查了服务器的熵值:

cat /proc/sys/kernel/random/entropy_avail

熵值为133,可能熵值太小???

于是又继续搜寻如何修改熵值: 1)熵值是干嘛的 Entropy(熵,[shāng])在信息论中表示数据的混乱程度或者不确定性,可理解为随机数据。 在 GNU/Linux 中有两个虚拟设备专门用于生成随机数以供系统使用。分别为 /dev/random /dev/urandom,又称 PRNG(Pseudorandom Number Generator,伪随机数发生器),其中 /dev/random 数据来源为硬件设备的活动(键盘输入、磁盘读写、内存错误等)和其他操作系统资源,默认熵池随机数资源大小为 4kB ,由内核参数/proc/sys/kernel/random/poolsize控制。

2)安装rng-tools工具

yum install -y rng-tools

3)修改 /etc/sysconfig/rngd 文件,如没有该文件就创建

echo '''# Add extra options here

EXTRAOPTIONS="-r /dev/urandom" 

 ''' > /etc/sysconfig/rngd

4)启动rngd并设置开机启动 centos7启动方式:

systemctl start rngd.service && systemctl enable rngd.service

5)再次验证:

cat /proc/sys/kernel/random/entropy_avail

3129

数值也有原来的133变为3129 修改熵值博客原文链接:https://blog.csdn.net/weixin_38339601/article/details/110423282

然后重新启动tomcat,启动成功了,不再报错!!

以上仅作为问题解决记录!

查看原文