背景
我们的项目是springboot+vue技术栈,但是今天发现一个问题,就是在Windows上启动之后登陆是正常的.但是发布在Linux上的时候首次登陆特别的慢. 我一开始是以为是菜单加载的慢的原因或者是定时任务导致的.但是很快被否了, 因为如果是这些问题导致的,不可能Windows是正常的速度而放在Linux就不一样了, 所以可能是其他的问题.
定位问题
<java web项目启动超级慢_java web项目部署在linux系统出现第一次登录高延迟的问题…>
通过查看系统日志,发现时间主要消耗在了创建session,并且定位到是SecureRandom的初始化问题,继续查看,发现session的id创建方式为uuid,到这里,熟悉linux的人就会明白问题在哪了。
Java的UUID依赖于SecureRandom.nextBytes方法,而SecureRandom又依赖于操作系统提供的随机数源。在Linux系统下,它的默认依赖是/dev/random,而这个源是阻塞的。最可怕的是,这个nextBytes方法还是一个synchronized方法,也就是说,如果多线程调用UUID,生成速率不升反降。
解决方法
去jdk安装目录下,如果忘记了可以执行命令 vi /etc/profile, 看下jdk在哪, 然后接着进入 jre/lib/security/java.security 找到这个文件修改
替换成
securerandom.source=/dev/urandom
速度立刻正常!
参考
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/16331.html