记一个 java web 项目启动极慢的问题

  1. 熵过低导致问题
  2. 阻塞熵源问题

同事排查了很久…

最后交到我这里也折腾了一下午…


记一次 springboot 项目启动极慢的问题

部署在服务器后,输入 java -jar myweb.jar 运行项目。

但是,服务器迟迟不打印运行日志,要过个几分钟或十几分钟才正常输出启动日志

我在本地编写了一个 demo 项目,功能就是死循环打印随机数,java -jar number.jar 却能正常启动

一个是 web 项目,一个是非 web 项目,因此我猜测可能和网络有关系。

解决方案

输入 hostname 查看输出内容,然后 vim /etc/hosts,添加这三条(我试过第三条不加也行):

当然,关于造成服务器上 java 启动极慢的问题,不止这一个。

这里整理了几个可能的解决方案,实际遇到启动慢的情况下都可以试试:

熵过低导致问题

安装

yum install epel-release -y
yum install haveged -y

配置启动

#启动
systemctl start haveged
#开机启动
systemctl enable haveged
#查看启动状态
systemctl status haveged
#查看开机启动状态
systemctl list-unit-files | grep haveged

查看熵是否到正常值,值已经 >1000,可看应该是安装成功

cat /proc/sys/kernel/random/entropy_avail

阻塞熵源问题

原来,Java 随机数生成依赖熵源(Entropy Source),默认的阻塞型的 /dev/random 熵源可能导致阻塞,而换一个非阻塞的 /dev/urandom的熵源就可以了。

具体操作来说,有两种方法:

一种是修改 Java 配置文件

vim $JAVA_HOME/jre/lib/security/java.security

找到 securerandom.source=file:/dev/random

改为 securerandom.source=file:/dev/../dev/urandom

另一个是修改应用启动脚本。对于需要多实例各处部署的应用来说,修改启动脚本是成本最低,最可控的方案。

在启动脚本中加入配置属性:-Djava.security.egd=file:/dev/./urandom,然后启动,问题解决。

需要注意的是,spring boot 中,这个参数应该加在 -jar 参数之前,如果加在 -jar 参数之后,可能不起作用。


转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:记一个 java web 项目启动极慢的问题

字数:522

本文作者:夏来风

发布时间:2020-12-23, 23:38:36

原始链接:http://www.demo1024.com/blog/java-run-jar-slow/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。