今天内网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,启动成功了,不再报错!!
以上仅作为问题解决记录!
发表评论