wangbin
  • wangbin
  • 2017-04-21
  • IT

坑爹的bug:java.security随机数生成

一. 简介

最近学习使用supervisord配置tomcat时,出现tomcat启动不了的情况,一直卡在“INFO: Deploying web application directory ......”不动。

试了用原本的命令启动、复原tomcat配置、重装tomcat、重装jdk都没用,后来网上搜索发现说修改jdk1.x.x_xx/jre/lib/security/Java.security文件中securerandom.source的值,从file:/dev/./random改为file:/dev/./urandom,可以解决问题。

按照这个修改后,果然可以启动tomcat了。

二. 原因分析

Linux中的随机数可以从两个特殊的文件中产生,一个是/dev/random,另外一个是/dev/urandom。

jdk默认调用random,random产生的随机数效果好,更安全,但是需要时间间隔生成随机数,而且产生的量很有限,在不能产生新的随机数时会阻塞程序。

urandom在不能产生新的随机数时不会阻塞程序,速度要快一点,但是产生的随机数效果一般,安全性没有random高。

综合上面两者的介绍,我的情况应该是使用random,在不能产生新的随机数时阻塞了tomcat启动,而将其改为urandom就可以正常运行了。

三.结尾

真是奇葩的bug,莫名其妙的出现,想破脑袋也不会想到会是这个原因,纪录下,以后别再被这种bug困扰,真坑爹...

参考:

  1. http://blog.csdn.net/njchenyi/article/details/46641141

  2. http://hipercomer.blog.51cto.com/4415661/857870