springboot程序启动慢解决

news2024/11/19 1:42:23

记springboot程序启动慢解决。

今天将程序发给别人后,别人立马说你这个启动很慢。

查看程序启动耗时分布

<!--启动耗时监测-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

management:
  endpoints:
    web:
      exposure:
        include: startup

修改启动类:

@SpringBootApplication
@MapperScan("com.huishi.mapper")
public class LljkApplication {

    public static void main(String[] args) {
//        SpringApplication.run(LljkApplication.class, args);


        new SpringApplicationBuilder(LljkApplication.class)
                .applicationStartup(new BufferingApplicationStartup(20480))
                .run(args);

        System.out.println("============启动成功");
    }

}

然后发送POST请求到/actuator/startup接口就会返回程序启动的耗时分布,然后我发现是dataSource xxxDataMapper sqlSessionFactory这几个bean初始化时间太长了,有30几秒,这一看就知道是和数据库源有关。

由于是启动很慢,所以猜测是程序启动时在创建数据库连接池的时,需要创建指定数量的数据库连接慢导致的。

建立数据库连接流程

MySQL服务器收到来自客户端的tcp连接请求后,服务器会根据客户端IP到host_cache查询是否存在有效的解析记录,如果有直接创建成功。

没有或HOST_VALIDATED为NO,就会对IP进行DNS解析,首先通过IP解析出主机名,再将主机名进行解析出IP,将这两次IP进行比对,如果一样,则解析成功,并将HOST_VALIDATED设为YES。如果解析失败,判断失败的原因是永久的还是临时的,如果是永久的,则HOST的值依旧为NULL,且将HOST_VALIDATED的值设置为YES,后续连接不再进行解析,如果该原因是临时的,则HOST_VALIDATED依旧为NO,后续连接会再次进行DNS解析。

 查看host_cache表

mysql> select * from performance_schema.host_cache\G
*************************** 1. row ***************************
                                        IP: 192.168.31.47      #连接到服务器的客户端IP地址
                                      HOST: NULL               #客户端DNS解析出的主机名,null代表未知
                            HOST_VALIDATED: NO                #是否执行了DNS解析,如果值为YES则主机列将用作与IP相对应的主机名,以便可以避免对DNS的其他调用;如果值为NO则每次连接尝试都会尝试DNS解析,直到最终以有效结果或永久错误完成解析
                        SUM_CONNECT_ERRORS: 0                  #被视为“阻塞”的连接错误数,仅统计协议握手错误,并且仅统计HOST_VALIDATED=YES的主机
                 COUNT_HOST_BLOCKED_ERRORS: 0                  #以下为各种连接方式失败的计数
           COUNT_NAMEINFO_TRANSIENT_ERRORS: 0
           COUNT_NAMEINFO_PERMANENT_ERRORS: 1
                       COUNT_FORMAT_ERRORS: 0
           COUNT_ADDRINFO_TRANSIENT_ERRORS: 0
           COUNT_ADDRINFO_PERMANENT_ERRORS: 0
                       COUNT_FCRDNS_ERRORS: 0
                     COUNT_HOST_ACL_ERRORS: 0
               COUNT_NO_AUTH_PLUGIN_ERRORS: 0
                  COUNT_AUTH_PLUGIN_ERRORS: 0
                    COUNT_HANDSHAKE_ERRORS: 0
                   COUNT_PROXY_USER_ERRORS: 0
               COUNT_PROXY_USER_ACL_ERRORS: 0
               COUNT_AUTHENTICATION_ERRORS: 17
                          COUNT_SSL_ERRORS: 0
         COUNT_MAX_USER_CONNECTIONS_ERRORS: 0
COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS: 0
             COUNT_DEFAULT_DATABASE_ERRORS: 0
                 COUNT_INIT_CONNECT_ERRORS: 0
                        COUNT_LOCAL_ERRORS: 0
                      COUNT_UNKNOWN_ERRORS: 0
                                FIRST_SEEN: 2020-12-18 10:30:03 #客户端第一次尝试连接的时间戳
                                 LAST_SEEN: 2020-12-18 14:50:41 #客户端看到最新的连接尝试的时间戳
                          FIRST_ERROR_SEEN: 2020-12-18 10:30:03 #第一次连接错误的时间戳
                           LAST_ERROR_SEEN: 2020-12-18 14:46:37 #最近一次连接错误的时间戳
1 row in set (0.00 sec)

参数 host_cache_size与skip_name_resolve 的作用

host_cache_size:控制主机缓存的数量,设置为0时,禁用主机缓存,每次服务器连接时,服务器都会进行DNS查找,相比skip-host-cache来说,host_cache_size更加灵活,可以随时变更或禁用。

skip_name_resolve:检查客户端连接时是否进行DNS解析IP主机名,默认是关闭的,则MySQL服务器会在检查客户端连接时解析主机名。若开启,则跳过这个DNS解析的过程,就只用IP ;在这种情况下,授权表中的所有列值都必须是 IP地址。

有些时候DNS 解析延迟或者网络环境不稳定的情况下,可以设置这个配置从而跳过DNS解析的过程,加快数据库连接速度。

解决方式

因为我们程序在启动时,需要创建不止一条数据库连接,有时需要创建多个数据库连接放入数据库连接池,然而每条都进行DNS解析就导致速度很慢,可以直接跳过。

在mysql的配置文件my.ini中增加以下配置:

[mysqld]
skip-name-resolve

开启这个配置后,就不能基于主机进行授权了,一般IP是多变的,但是主机名是不变的,所以基于主机HOST授权只需授权一次。开启这个配置需要基于IP进行授权。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1371483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自定义HBase负载均衡器MyCustomBalancer实现步骤与代码解析

目录 1.HBase默认负载均衡策略 1.1 负载均衡总体流程 1.2 不能触发负载均衡的情况 1.3 负载均衡算法 2.自定义的 HBase 负载均衡器的步骤 3.MyCustomBalancer的代码细节 3.1 balanceCluster 方法的作用 3.2balanceCluster 对数据的影响 3.3监控HBase的性能指标 3.3.…

小红书达人投放策略,如何做好达人筛选工作?

随着社交媒体的发展&#xff0c;品牌投放策略也在不断变化和创新。作为一个快速崛起的社区平台&#xff0c;小红书已经成为众多品牌进行市场营销的热门选择之一。本文我们将详细描述小红书达人投放策略&#xff0c;如何做好达人筛选工作&#xff1f; 一、品牌投放策略 在小红书…

DUET: Cross-Modal Semantic Grounding for Contrastive Zero-Shot Learning论文阅读

文章目录 摘要1.问题的提出引出当前研究的不足与问题属性不平衡问题属性共现问题 解决方案 2.数据集和模型构建数据集传统的零样本学习范式v.s. DUET学习范式DUET 模型总览属性级别对比学习正负样本解释&#xff1a; 3.结果分析VIT-based vision transformer encoder.消融研究消…

人体姿态识别(附教程+代码)

人体姿态识别&#xff08;Human Pose Estimation&#xff09;是一种基于计算机视觉和深度学习的技术&#xff0c;用于自动检测和识别人体的姿态和动作。它可以在图像或视频中准确地确定人体各个关节的位置和运动。 人体姿态识别技术具有广泛的应用领域。在健身和运动领域&…

python24.1.10创造购物清单

数据结构-列表 在列表里额外加东西 删除列表中某个元素 列表可包含多种类型的数据 统计列表中元素数量 列表索引 针对列表的函数 利用索引赋值可以直接覆盖本来元素 实践

数据分析师面试必备,数据分析面试题集锦(四)

大家好&#xff0c;今天整理数据分析面试题集锦&#xff0c;经常会被问到&#xff0c;“数据分析需要学习什么技能&#xff1f;”&#xff0c;“针对实际的业务场景&#xff0c;如何使用数据分析工具去分析&#xff1f;”基于此作者总结数据分析面试常用的问题&#xff0c;面试…

专业课128分总分400+南京理工大学818信号系统与数字电路南理工考研经验分享

专业课128分总分400南京理工大学818信号系统与数字电路南理工电光院考研经验分享&#xff0c;希望自己的经历对大家有借鉴。 我是在六月底确认自己保不上研然后专心备考的&#xff0c;时间确实比较紧张。虽然之前暑假看了一点高数&#xff0c;但因为抱有保研的期望&#xff0c…

Acrel-5000重点用能单位能耗在线监测系统的实际应用分析-安科瑞 蒋静

摘要&#xff1a;根据《重点用能节能办法》&#xff08;国家发展改革委等第七部委2018年15号令&#xff09;、《重点用能单位能耗在线监测系统推广建设工作方案》&#xff08;发改环资[2017]1711号&#xff09;和《关于加速推进重点用能单位能耗在线监测系统建设的通知》&#…

vue echarts折线图加背景颜色 值区域对应的右侧加上文本

mounted() {this.lineEcharts();},lineEcharts() {const option { tooltip: {trigger: axis,transitionDuration: 0 // 让toolltip紧跟鼠标&#xff0c;防止抖动},title: {text: 得分,left: 25,textStyle:{color: #333,fontSize: 12,fontWeight: 400}, },legend:…

JAVA毕业设计119—基于Java+Springboot+vue的智能停车场管理系统(源代码+数据库+9000字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的智能停车场管理系统(源代码数据库9000字论文)119 一、系统介绍 本项目前后端不分离 登录、控制台、停车场管理、车牌识别、车辆管理角色管理、系统菜单、…

Speech | 语音克隆Openvoice的论文解读及项目实现

本文主要介绍了语音克隆Openvoice的论文以及项目实现~ 论文题目&#xff1a;OpenVoice: Versatile Instant Voice Cloning 论文地址&#xff1a;2312.01479.pdf (arxiv.org) 项目地址&#xff1a;https://github.com/myshell-ai/OpenVoice.git 官网&#xff1a;Home (myshell.a…

Prometheus监控遇上报错invalid is not a valid start token

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 使用prometheus采集java应用的metric指标数据&#xff0c;在prometheus界面pod状态为down&#xff0c;报…

云HIS系统源码,基层卫生HIS系统,云端SaaS模式多医院版

系统介绍&#xff1a; 基层卫生健康云HIS系统采用云端SaaS服务的方式提供&#xff0c;使用用户通过浏览器即能访问&#xff0c;无需关注系统的部署、维护、升级等问题&#xff0c;系统充分考虑了模板化、配置化、智能化、扩展化等设计方法&#xff0c;覆盖了基层医院的主要工作…

AQS应用之BlockingQueue详解

概要 AQS全称是 AbstractQueuedSynchronizer&#xff0c;中文译为抽象队列式同步器。BlockingQueue&#xff0c;是java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类&#xff0c;它的特性是在任意时刻只有一个线程可以进行take或者put操作&#xff0…

Cesium笔记 viewer控件隐藏

Cesium初始化后&#xff0c;场景中会有时间轴&#xff0c;动画&#xff0c;home等控件显示&#xff0c;需要将这些控件隐藏&#xff0c;如下&#xff1a; init() {let viewer new Cesium.Viewer("cesiumContainer", {fullscreenButton: false, // 隐藏界面右下角全…

【日志】Alertmanager+Loki实现Teams告警

目录 简介一、配置Webhook二、安装msteams三、配置Alertmanager简介 在前面的文章我们实现了Loki日志告警,接下来新增一种告警媒介:微软Teams 一、配置Webhook 这块我们主要借助incoming Webhook应用来发送消息到团队,把它添加到团队里,参考:https://www.cnblogs.com/a…

【Proteus仿真】【Arduino单片机】智能感应温控风扇

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用LCD1602液晶显示模块、DS18B20温度、按键、声光报警、L293D电机驱动等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示传感器检…

网络音频对讲广播模块-定时广播 ip网络广播音频模块SV-2401

1.模块介绍 SV-2400V网络音频模块是一款高性能的10/100M网络音频模块&#xff0c;采用高性能处理器及专业Codec&#xff0c;能接收网络音频数据流&#xff0c;转换成音频模拟信号输出。亦能采样本地的mic输入或linein输入&#xff0c;发送到网络上&#xff0c;供其他网络音频模…

Lumerical Examples------Ports

Lumerical Examples------Ports 引言正文示例引言 Ports 在 FDTD 工程中是一个很特别的组件,这里我们对它进行介绍 正文 虽然 Ports 不是严格意义上的 Monitor(监视器), 但是它也可以进行 S 参数提取。Ports 扮演着一个 frequency domain power monitor 的和 mode expan…

Mjdioureny练习二

&#xff08;一&#xff09;一个老人强烈的阳光照射 我跟他说&#xff1a;a old man strong sunlight 这四张照片都是很不错的 每一张都十分清晰而且十分真实逼真&#xff0c;细节把控的也十分完美。 &#xff08;二&#xff09;一个中国50岁的大叔&#xff0c;走在清晨的深林…