java 应用连接oracle 超级慢的解决方法

为了将应用迁移到云上,搞了几个星期。

最后测试的时候发现连接oracle非常慢,我们用的是阿里的druid,应用如果 长时间不用,第一次连接时超时,第二次就非常快。开始以为是druid的问题,各种参数修改,都不起作用。

在调度机找到$JAVA_HOME/jre/lib/security/java.security,终于发现

22105431_tlSp.jpg

直接修改 java.security文件

securerandom.source=file:/dev/urandom
修改成

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

 

修改后再次连接DB,正常了。

 

那究竟是什么原因导致jdk 的这个系统参数会引发问题呢?

  1. Jdk 连接oracle的时,从某个版本开始

The JDBC 11gneeds about 40 bytes of secure random numbers, gathered from /dev/random, toencrypt its connect string.

  1. linux有两种类型随机数发生器,一个是/dev/random,一个是/dev/urandom,urandom=unlocked random,即非阻塞随机。要产生真实的随机,linux是搜集真实的随机事件放到一个熵池里,当随机事件不足是,/dev/random会阻塞等到有随机事件产生才返回,而/dev/urandom则会重复利用以前的随机事件迅速返回。
  2. 那这里默认就是使用的/dev/urandom,为什么还是有问题呢?

因为这个版本的jdk,实际上在jdk代码里当匹配到/dev/urandom时实际上还是指向了/dev/random,于是大家就想到了一个变通办法采用/dev/./urandom,在linux系统中,加个点表示当前路径这个和之前一样,但是jdk代码却不不配,就绕过去了

网上参考文档:

https://www.jb51.net/article/117086.htm

https://blog.csdn.net/leochenx/article/details/72935095

 

转载于:https://my.oschina.net/zhsoft/blog/1833849

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值