MybatisPlus与服务器配置问题导致项目缓慢
问题
- 项目JAR包启动很慢,大概在10分钟左右
- 接口相应超时,检测代码块大概执行了7分钟
问题仅发生在线上服务器,本地及本地服务器均无法复现
排查途径
- 查看服务器cpu负载:无负载压力
- 查看慢sql:无慢sql
- 查看磁盘读写状态:正常
- 打印日志:具体为在代码块的各个方法中打印日志,定位到具体的方法后,检查代码逻辑,因为此处代码仅仅是实体Entity的值填充以及最后insert保存记录,导致一开始忽略这里代码超时的可能,但在无慢sql、磁盘读写都正常的情况下,对这个方法的多加了一些日志,就是简单的标识start和end来方便查看时间,最终定位到了问题
最终原因
在实体Entity填充数值的时候,使用到了Sequence 这个类,生成分布式ID。
package com.baomidou.mybatisplus.core.toolkit;
public class Sequence {
/***/
}
在这个类中存在两个方法:
NetworkInterface network = NetworkInterface.getByInetAddress(this.inetAddress);
String name = ManagementFactory.getRuntimeMXBean().getName();
这两个方法都是用来获取网络名称,但由于服务器host名称配置不一样,导致无法用缓存,就会导致这个类加载特别慢
验证问题
登录服务器,执行下面的命令
hostname
显示结果为:a- 查看etc下的hosts文件:
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
这里确实没有关于hostname的信息
解决方法
修改hosts文件(修改前先备份原文件),然后重启系统
修改结果为下
127.0.0.1 a localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 a localhost localhost.localdomain localhost6 localhost6.localdomain6
最后JAR包的启动和相关接口都不会再出现慢的情况