多数据源连接Oracle报错,linux熵池耗尽问题
最近碰到了个很有意思的问题,springboot加载多数据源,遇到了在启动时数据库连接报错的问题。
报错信息:
The error occurred while executing a query
然后找到了一篇文章,linux熵池耗尽
在jvm启动参数里加上
-Djava.security.egd=file:/dev/./urandom
就ok了。
可是这是为什么呢?
因为相同环境的多台机器,有些机器有问题,有些机器没问题,排查这个问题耗费了很长时间。
是虚拟机导致的吗?
可以看到,上面那篇博文里是怎么说的:
在无头服务器中,用于(java)应用程序连接的11g JDBC驱动程序可能会造成麻烦。
原因是JDBC 11g需要大约40个字节的安全随机数,从/ dev / random收集,以加密其连接字符串。
为什么这个神秘的“熵池”耗尽了随机数?
我们先去看看。
首先是正常的服务器,执行如下命令:
cat /proc/sys/kernel/random/entropy_avail
cat /proc/sys/kernel/random/poolsize
接着是报错的那台机器:
为什么entropy_avail就只有189呢?是这个原因吗?
为什么只有189就不能用了呢?
再来看看这篇文章
https://jarfield.iteye.com/blog/1739834
再回来看看oracleJDBC,原来默认情况下,Oracle JDBC 11g似乎会使用/ dev / random。而使用/dev/random生成随机数时,依赖熵池。如果熵池空了或不够用,对/dev/random的读取就会堵塞,直到熵池够用为止。
但是上面这篇文章中说,有得必有失,urandom的随机性弱于random。
这点我也找到了一篇文章,来反驳这种说法,大家可自行围观。
那怎么让熵池增加呢?熵池小会有什么其他后果吗?
jarfield老兄上面那篇文章中说到
熵池本质上是若干字节。/proc/sys/kernel/random/entropy_avail中存储了熵池现在的大小,/proc/sys/kernel/random/poolsize是熵池的最大容量,单位都是bit。如果entropy_avail的值小于要产生的随机数bit数,那么/dev/random就会堵塞。
熵斥怎么增加?
只有少数驱动程序会填充熵池,首先是键盘和鼠标。
实际上是从各种noice source中获取数据,noice source可能是 键盘事件、鼠标事件、设备时钟中等。
linux内核从2.4升级到2.6时,处于安全性的考虑,废弃了一些source。source减少了,熵池补给的速度当然也变慢,进而不够用。
熵斥堵塞会有什么后果?
其实,通过消耗熵池,可以构造DOS攻击。原理很简单,熵池空了,依赖随机数的业务(SSL,加密等)就不能正常进行。
怎么补充熵池?
Linux服务器在运行时,既没有键盘事件,也没有鼠标事件,如何快速积累熵池呢?
在上面那篇文章中有说到:
例如rngd或rng-tools。
先观察rngd启动前的熵池大小:
watch cat /proc/sys/kernel/random/entropy_avail
只有100多。
安装rng-tools,参考文章 https://blog.csdn.net/tiantao2012/article/details/78792046。
yum install rng-tools -y
启动rngd服务
service rngd start
再看下熵池
飙升到3000多。
哈哈,搞定收工。
最后,是我的星球,哈哈。
多数据源连接Oracle报错,linux熵池耗尽问题的更多相关文章
- ORA-28547:(Navicat Premium连接oracle报错)
1.背景 Navicat Premium连接oracle报 ORA-28547:connection to server failed, probable Oracle Net admin errro ...
- mac版本navicat连接oracle报错ORA-21561
最近电脑更换成mac,很多软件都和win不一样了,正在慢慢适应,连接oracle原来用的客户端是pl/sql develop,蛋疼的是没有了mac版本, 用了navicat,具体设置如下 1.新建连接 ...
- Jmeter中连接Oracle报错Cannot create PoolableConnectionFactory
填坑贴,之前一直用jmeter2.13版本进行oracle测试,今天改为3.2版本,发现按照以往的方法执行测试,JDBC Request结果始终报错:Cannot create PoolableCon ...
- kettle连接oracle报错oracle.i18n.text.converter.CharacterConverter.OGS.getInstance(I)Loracle/i18n/text/converter/CharacterConverter
问题背景1:需要将一张excel中的数据导入到数据库中,并且还有关联转换和去重的处理问题,且此excel表不是固定的,需要写一个脚本 当新的excel拿来的时候,可以直接导入即可.所以我想用kettl ...
- vs 调式连接oracle报错问题32,64位问题
wind8 系统选择项目时生成目标平台选择为X86 报错“System.Exception”类型的未经处理的异常在 WindowsFormsApplication1.exe 中发生 其他信息: 尝试加 ...
- centos7 64位系统jdbc连接oracle报错问题
这两天发生了一个错误,记录下来. 报错如下: ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could n ...
- 解决连接oracle报错 尝试加载Oracle客户端库时引发BadImageFomatException。如果在安装64位Oracle客户端组件的情况下以32位模式运行,将出现此问题的报错。
最近遇到一个.NET连接Oracle的一个错误,其主要原因是换了一台电脑,在新电脑上运行以前的项目出现了的一个错误,工作环境为vs2017+Oracle 64位,win10系统 这个错误头疼了一天,找 ...
- navicat连接oracle报错
Navicat 连接 Oracle ORA-28547:connection to server failed, probable Oracle Net admin error Navicat for ...
- 项目连接oracle报错:listener does not currently know of SID given in connect descriptor
今天练习用IDEA搭建了一个ssm框架,数据库是oracle,在执行mybatis-generator时,一直报错listener does not currently know of SID giv ...
随机推荐
- 算法学习--Day10
今天开始了新一章的学习,前面的题目虽然做了几道,但是我觉得训练量仍然太小了.不过机试确实很多题目,并且难度也有所不同,所以要针对不同的题目进行专门的练习才好.题目类型有些多,等接下来我将搜索的题目写完 ...
- c# Marshal.PtrToStructure(StructPtr, typeof(T)); 特别注意
以下异常:Marshal.PtrToStructure(StructPtr, typeof(T)); 原因: 在实际使用中 T 没有一个 parameterless constructor 于是加 ...
- ubuntu 安装R 语言
我个人的环境是 ubuntu 12.04 64 位桌面版. 我自己在安装R 语言时,发现它依赖的库真不是一般的多,所以我在这里简单记录一下我整个安装过程 首先你需要安装 apt-get install ...
- DB2 - 编目的解释
编目(Catalog),是在本地或远程建立客户端到服务器的数据库连接的过程.其目的在于获取编目信息,即生成用来访问数据库的目录.系统数据库目录包含一个列表和指针,通过目录可以使 DB2 能够找到已知的 ...
- java string(转)
初探Java字符串 优化变成了忧患:String.split引发的“内存泄露” String是java中的无处不在的类,使用也很简单.初学java,就已经有字符串是不可变的盖棺定论,解释通常是:它是f ...
- Linux (一)
Linux目录结构 / :根目录.位于分层文件系统的最顶层,可以说它包含了所有的目录和文件 /bin :系统可执行目录 /sbin :系统管理员的可执行文件 /boot :存放用于启动linux系统的 ...
- Metasploits之ms10_018
漏洞详情:https://technet.microsoft.com/library/security/ms10-018 一准备: 1:kali Linux系统 192.168.195.129 2:W ...
- C8051F单片机定时器的定时
假设C8051F020单片机的晶振是sysclk=22114800HZ,即每秒计22114800个数经过Div=12分频后得到定时器的计数频率Tclk=sysclk/12,每秒计22114800÷12 ...
- [已读]ppk谈javascript
读的第一本javascript方面的书籍,印象也比较深.ppk对浏览器兼容很有研究~~可以看看他的www.quirksmode.org
- EDAS提交论文字体未嵌入
一.深夜更一波,刚刚在EDAS提交论文,提示格式不通过,说我有字体未嵌入.但是之前一直都没有问题,这次只是在LaTeX中嵌图的时候把eps换成PDF了.所以问题应该是出在我的PDF图里,里面有字体未被 ...