Centos 启动Spring boot项目慢的原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos 启动Spring boot项目慢的原因相关的知识,希望对你有一定的参考价值。

参考技术A 在客户那部署 Springboot项目,启动非常慢要2-3分钟. 因为开发的时候本地windows启只要7s,测试环境也是centos只要7s.
因为客户那是虚拟化了3台机器, 安装同样的操作系统,但其中1台很快7s,其他两台很慢.这就非常奇怪了.
网上大部份都说random的原因, 我们全都照着改了依然很慢.
通过strace确切知道改成功了,没改之前全是random,改了之后有urandom.
但是可以发现还是会调random, 而且机器的随机数值一直在3000左右,所以可以排除random原因.

奇怪的是系统也没有报错,就是启动慢,启动成功后接口页面都没有问题.关键是有1台机器又很快,所以让我们只能考虑是机器原因或虚拟化的原因.然后我们复制了一台那个没有问题的机器, 在这一台上重新部署,结果依然是很慢.查看cpu 内存 io 都没有什么问题.
通过starce也只能看出是 futex 花费了大量时间,下图上11254这个进程id,这个futex花费了1.89s,然后往上找到11254的源头也看不出什么原因导致.

然后怀疑应该不是我们项目问题,我拿一个最简单的springboot项目测试也是很慢.
然后把springboot日志级别调成debug, 刚开始查问题的时候就已经试过了调日志,因为发现出现Spring那个logo之前很慢而且也没有日志, 然后后面的日志又太长,以为找不出什么有用的信息,试过一次后就又调成info级别了.
我们启动慢的情况是这样的,启动后, 等几十秒出现Spring logo, 然后跑了一会儿,又等几十秒,然后系统启动成功.
所以这一次想到,虽然启动前没有日志,但是中间的慢,应该可以知道它停在哪里.然后google那个停在那里的日志.

点进去后有一句话看的我心头一愣 , 这个用户说,似乎这20s的等待是由于NetworkInterface.getAll
方法

那么也就是说根本原因就是 InetAddress.getLocalHost 导致很慢的原因了.
然后用那个最简单的Springboot项目调用一下这个方法,果然不出所料花了20s的时间.
找到根本原因随便一搜就知道,是因为在/etc/hosts 里并没有加入当前主机的名字,.
在正式环境下加入了主机名后果然快了.
那为什么有一台很快了,因为那一台是另一个同事装了mq,他修改了这个hosts文件加了主机名.
然后复制这台机器的时候会填一个新主机名,所以复制的那一台机器也很慢.

最终解决掉了这个奇怪的问题,通过这一次经历,也学会了使用strace,jstack等调试工具,也有不少的收获.

看我如何解决Mac系统启动Spring Boot项目速度慢的问题

1 前言

最近公司里面使用mac系统,发现一个很有意思的问题,我在家里windows环境下,调试spring boot项目时,启动非常快,到了公司使用mac系统启动项目,非常慢,如果找到了一个解决方案,可以大大提高Mac下Spring Boot项目的启动速度,这里给小伙伴分享一下~

2 获取mac系统的电脑名称

同时按下command+空格键,打开聚焦搜索,输入终端,在终端里面输入命令:

hostname

会出现类似userName-MacBook-Pro.local的名称

3 修改并配置 /etc/hosts 文件

打开并修改/etc/hosts文件:

sudo vi /etc/hosts

修改之前的内容大致如下:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
127.0.0.1       org.cat
255.255.255.255 broadcasthost
::1             localhost

修改之后的内容大致如下:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
127.0.0.1       org.cat
255.255.255.255 broadcasthost
::1             localhost 你的机器名.local

修改的内容很简单,只需要在最后一行,添加hostname的映射即可,比如笔者,在最后一行localhost,添加了我的电脑名 userName-MacBook-Pro.local,修改了hosts文件之后,原来需要十几秒启动,现在2s就可以启动了。

写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,希望尽自己的努力,做到更好,大家一起努力进步!

如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!

给自己的梦想添加一双翅膀,让它可以在天空中自由自在的飞翔!

以上是关于Centos 启动Spring boot项目慢的原因的主要内容,如果未能解决你的问题,请参考以下文章

看我如何解决Mac系统启动Spring Boot项目速度慢的问题

看我如何解决Mac系统启动Spring Boot项目速度慢的问题

看我如何解决Mac系统启动Spring Boot项目速度慢的问题

看我如何解决Mac系统启动Spring Boot项目速度慢的问题

多个Spring Boot项目部署在一个Tomcat容器无法启动

Spring boot centos部署启动停止脚本