网站首页 > 精选教程 正文
小明看着面前的这盘10块钱的豪华番茄鸡蛋浇头餐,心里狠狠地想:“就算这个月超预算,明天也要加个鸡腿,升级成极品帝王餐,解解馋”。
正要开动,一阵急促的铃声从手机上传来,他低头一看,是项目经理打来的,顿时就是一惊,一股不好的预感从心头升起。刚点了接听键,大吼声就从听筒里传了出来:“赶快回来,系统崩了,立刻,马上......”。
小明看着那一点没动的豪华餐,不禁一阵心疼,无奈的狠狠地扒拉了一大口,火急火燎的就往回赶。一进办公室,就看见项目经理黑着脸,看着一群人手忙脚乱的忙活。小明顾不上打招呼,赶紧坐上自己的座位,开始鼓捣。
经过两个小时的奋战,小明担心的事情终于发生了,问题真的出在自己这儿,他不禁一阵头晕目眩。但现在还不是晕倒的时候,必须找出真正的原因,为什么自己写的这个接口,竟然会莫名其妙的总是时不时的超时呢?
SecureRandom,小明看着这个接口里唯一的另类,“罪魁祸首会不会就是它”。但是他实在不知道错在哪里,项目经理也不知道。他灵机一动,面向百度编程,就求助于百度吧。
“熵”,他看到这个字,一头雾水,“这是个什么玩意?熵池又是什么玩意?”
“熵指混乱程度。熵池是一种计算机系统内部的状态,或者说计算机系统内部的混乱程度,包含所有可能的随机性的来源。它是随机数生成器的核心。linux系统通过收集计算机系统的各种噪音,如鼠标移动,键盘敲击,网络数据传输等,把这些因素产生的熵存入熵池,为随机数生成器提供更加高质量的随机数。”
“但由于linux服务器所处的环境太安静了,比如没有用户活动,导致熵产生的不够,熵池中的熵值不足,随机数生成器需要等待足够的熵值才能产生随机数。”
“随机数有两种,一种是伪随机数,一种是安全随机数。java的SecureRandom就是安全随机数,它需要使用linux系统的熵池。当熵池中的熵值不足时,会阻塞,长达5、6分钟。可以用cat /proc/sys/kernel/random/entropy_avail查看linux的熵池。”
小明恍然大悟,赶紧到服务器上执行了一下命令,乖乖不得了,只有23。怪不得!他的接口每次调用都会因此阻塞,时间长了,服务器资源不足就挂了,波及了其他服务器,整个系统就崩溃了。那怎么办呢?小明赶紧继续往下看。
“解决办法有3种:一种是加java启动参数,-Djava.security.egd=file:/dev/./urandom;一种是修改jvm参数,找到$JAVA_PATH/jre/lib/security/java.security,将其中的securerandom.source=file:/dev/urandom替换成securerandom.source=file:/dev/./urandom,当然更好的方法是补熵,安装增熵服务haveged或rng-tools。”
小明看到这里,赶紧到服务器上安装haveged,当haveged服务启动之后,他再次查看熵池,发现值已经在1000以上了。整个系统也正常了。
小明长长的吁了一口气,终于搞定了,他这时才发现身上的衣服都已经被汗浸透了。他偷偷地看了眼项目经理,居然发现他不再生气了,反而露出了欣喜的笑容。“走,还愣着干什么,知道你中午没吃饭,我请你吃鸡腿”。
“耶......”
猜你喜欢
- 2024-11-01 关于启动电容器的匹配 启动电容器怎么接线
- 2024-11-01 冷水机的基本运行参数包括哪些? 冷水机参数含义
- 2024-11-01 Java线程池解读:从入门到精通,核心参数全掌握!
- 2024-11-01 使用Java编写求和的代码 使用java编写求和的代码是什么
- 2024-11-01 稳压器启动电流多大? 稳压器输出多少正常
- 2024-11-01 Java容器化参数配置最佳实践 java容器有哪几种
- 2024-11-01 Java变量 java变量的数据类型分为两种
- 2024-11-01 深入理解JVM运行原理:从内存布局到执行流程的全面解析
- 2024-11-01 丹佛斯VLT2900变频器维修后试运行参数设置方法及教...
- 2024-11-01 Java 21:有什么新变化? java+21:有什么新变化?举例说明
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)