坑爹的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困扰,真坑爹...
参考: