测试环境部署一个http api服务时,发现每次启动服务都要很久。感觉业务代码初始化不需要这么久,索性把所有业务逻辑都关掉,只起一个空的http接口看看。果然,整个启动过程还是需要1分钟。查看日志,时间基本都花在一个叫做createSecureRandom的方法上面。具体日志如下:
Oct 16, 2017 10:35:21 AM org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [60,765] milliseconds.
网上搜了一下,发现这是一个跟会话id相关的随机模块,随机种子取自会阻塞的文件/dev/random。由于我这是测试环境,不需要这么强的随机性,改成非阻塞的文件/dev/urandom即可加速启动。具体做法就是启动参数加上-Djava.security.egd=file:/dev/./urandom。
参考来源:http://www.jb51.net/article/117086.htm