zoukankan      html  css  js  c++  java
  • 多数据源连接Oracle报错,linux熵池耗尽问题

    最近碰到了个很有意思的问题,springboot加载多数据源,遇到了在启动时数据库连接报错的问题。
    报错信息:

    The error occurred while executing a query

    然后找到了一篇文章,linux熵池耗尽

    http://www.usn-it.de/index.php/2009/02/20/oracle-11g-jdbc-driver-hangs-blocked-by-devrandom-entropy-pool-empty/

    在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多。

    哈哈,搞定收工。

    最后,是我的星球,哈哈。

  • 相关阅读:
    表格文字溢出用省略号代替处理方法
    【Linux】Mysql5.7.12源码编译安装及配置
    【Linux】JDK安装及配置
    [SDOI2017]序列计数
    P1777 帮助_NOI导刊2010提高(03)
    BSGS和EXBSGS
    排列最小值
    三元组[01 Trie计数]
    数学题
    The Preliminary Contest for ICPC Asia Xuzhou 2019 E XKC's basketball team [单调栈上二分]
  • 原文地址:https://www.cnblogs.com/yaomaomao/p/10954468.html
Copyright © 2011-2022 走看看