记录一次程序启动慢的原因和解决方案

一、背景

最近有几个项目反映服务启动很慢,访问首页需要10来秒才能打开

二、问题排查

先检查一下内存、磁盘、cpu等是否达到瓶颈。(一般问题不在这里)

2.1 修改random

网上查询大部份都说random的原因, 我们全都照着改了依然很慢.
对于jdk而言,需要的是把配置文件中$JAVA_HOME/jre/lib/security/java.security中的
securerandom.source=file:/dev/random
改为
securerandom.source=file:/dev/urandom

2.2 查看日志

由于项目启动日志很多,一开始并没有仔细看日志 。 后来在启动日志中发现一条可疑日志
InetAddress.getLocalHost().getHostName() took 32048 milliseconds to respond. Please verify your network configuration.(InetAddress.getLocalHost().getHostName()的响应时间为32048毫秒。请验证您的网络配置。)
根本原因就是 InetAddress.getLocalHost 导致很慢的原因.
然后用找个最简单的Springboot项目调用一下这个方法,果然不出所料花了30s的时间.

正常情况下应该1-2ms就可以返回
在这里插入图片描述

找到根本原因一搜就知道,是因为在/etc/hosts 里并没有加入当前主机的名字
在正式环境下加入了主机名后果然快了.(这里在第一次配置的时候居然没效果,过了几天重新查看hostname发现主机名后多了个.local 后缀,重新加上hosts文件成功修复)

大致原因,获取本机地址,走到了DNS解析,DNS递归解析不到本机域名

贴一下修改后的配置

127.0.0.1 myMacBook-Pro.local  localhost
::1  myMacBook-Pro  localhost
192.168.1.19   myMacBook-Pro

总结

通过本次问题排查,我们在遇到问题时还是要仔细看日志问题,很多问题可以通过日志直接定位。

おすすめ

転載: blog.csdn.net/luomo0203/article/details/120834747