Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
SpringBoot启动内嵌Tomcat时执行业务在取Session卡住-SecureRandom

SpringBoot内嵌Tomcat时执行业务在取Session卡住-与SecureRandom有关

问题

SpringBoot内嵌Tomcat启动业务后,业务请求时挂住

解决方案

使用java -jar -Djava.security.egd=file:/dev/./urandom 来指定生成器。

排查过程

  1. jstack打印堆栈,查找到有请求卡在Catalina生成session时,去读取SecureRandom,然后卡在一个FileInputStream的readByte的地方;就一直卡住了.
  2. 根据之前Tomcat启动很慢的,猜想可能是因为随机数生成;
  3. 上网查找看到提示要更改安全有关配置使用file:/dev/./urandom ,于是使用参数启动java -jar -Djava.security.egd=file:/dev/./urandom ...
  4. 结果测试果然正确没有卡住.

遗留问题

  1. 找了另一台CentOS的机子,一样的不使用参数启动,发现另外一台机子上启动速度就非常快,不需要加额外的参数也不会住住; 比较了两台的JRE上的java.secure设置,也是一样的,这就比较奇怪了,都不设置参数情况下,一台会卡住,另外一台不会?!是什么地方区别,待进一步查证。

参考资料

  1. https://my.oschina.net/handsomejun/blog/708165
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.