Linux系统小技巧(1):/dev/random设备可能导致java程序启动慢或者操作耗时不正常...
发布日期:2021-08-30 16:00:07 浏览次数:12 分类:技术文章

本文共 954 字,大约阅读时间需要 3 分钟。

致因

Linux系统上的设备和/dev/urandom是不同的。这点可以使用下面的命令测试出来(执行会耗费几分钟时间,请有心理准备)

for dev in /dev/random /dev/urandom;do  echo "test ${dev}: "  time dd if=${dev} bs=512 count=1 > /dev/null 2>&1  time dd if=${dev} bs=512 count=1 > /dev/null 2>&1done

比如,如下是上面命令的一个输出结果

_2017_07_17_12_04

造成这种差异的原因在于,设备提供的不是伪随机数据,而是基于环境中的真实随机因素(即背景噪声作为熵源)的随机数据。所以,不像设备/dev/urandom。后者是一个伪随机数据生成器,能按照请求快速生成所需数量的数据。能生成多少内容由环境中的噪声决定。数据不足时,只能等待。

所以,在内容不足时,会将读操作阻塞,直至收集到足够的随机数据。这就是测试结果差异产生的原因,阻塞第二次的读操作将近1分钟时间。

所以,对于使用了设备的而言,都有被阻塞的可能。被阻塞时,上层应用可能表现为启动慢或者执行耗时不正常。因为行为与环境背景有关,行为随机。所以也导致上层应用因之引发的问题表现随机,不易排查。

比如,在Java社区,设备引致的问题早在jdk-1.4版本时就已经有报告。但是还是有客户不知道类似问题的致因和。

解决方案简单说,就是除非有明确的理由,必须要使用设备。否则,使用/dev/urandom设备即可。

对于jdk而言,需要的是把配置文件中$JAVA_HOME/jre/lib/security/java.security中的

securerandom.source=file:/dev/random

改为

securerandom.source=file:/dev/urandom

排查建议

对于Java程序启动慢,或者进程耗时不正常,请优先排查是不是/dev/random的问题。步骤如下

  1. 确认是不是使用的是设备/dev/random。这只要检查$JAVA_HOME/jre/lib/security/java.security对应的配置就好。
  2. 如果是,则变更配置。
  3. 重启Java程序确认是否问题解决。

转载地址:https://blog.csdn.net/weixin_34038652/article/details/90490909 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:性能测试工程师需要掌握的技能
下一篇:英国航空公司正在进行其数据中心电力中断的调查

发表评论

最新留言

很好
[***.229.124.182]2023年11月18日 08时00分21秒