Java的随机数实现有很多坑,记录一下这次使用jdk1.8里新增的加强版随机数实现SecureRandom.getInstanceStrong()
遇到的问题。
之前在维护ali-tomcat的时候曾发现过jvm随机数算法选用不当导致tomcat的SessionID生成非常慢的情况,可以参考JVM上的随机数与熵池策略 和 Docker中apache-tomcat启动慢的问题 这两篇文章。不过当时没有太追究,以为使用了-Djava.security.egd=file:/dev/./urandom
就可以避免了,在这次项目里再次遇到随机数导致所有线程阻塞之后发现这块还挺多规则。
本次项目中使用的是jdk1.8,启动参数里设置了
-Djava.security.egd=file:/dev/./urandom
使用的随机数方式是Java8新增的:
SecureRandom.getInstanceStrong();
碰到故障时,线程阻塞在
"DubboServerHandler-xxx:20880-thread-1789" #28440 daemon prio=5 os_prio=0 tid=0x0000000008ffd000 nid=0x5712 runnable [0x000000004cbd7000]
java.lang.Thread.State: RUNNAB