SpringBoot2源码分析2-启动耗时监控_spring boot 获取服务开机时长_天农学子的博客-程序员宅基地

技术标签: spring boot  spring源码  

Springboot启动耗时监控

1、在run方法的第一步执行就是记录启动的耗时

	StopWatch stopWatch = new StopWatch();
	stopWatch.start();

stopWatch.start()和stopWatch.stop()是成对出现的,这之间的部分就是StopWatch监控的事件,主要用于监控执行时长

2、在stopWatch.stop()执行之后会有一段打印启动日志的代码,我们可以继续跟进,然后看看静静做了些什么

stopWatch.stop();
if (this.logStartupInfo) {
    
	new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), stopWatch);
}

3、其他代码直接路过,我们跟踪这块代码

new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), stopWatch);

初始化对象这个代码不看,主要看logStarted方法
这个方法有2个参数

  • 第一个参数是一个Log对象
    getApplicationLog() 获取到了,这里的代码很简单LogFactory.getLog不做太多解读
  • 第二个参数是一个stopWatch

进入这个方法之后我们就看到这个方法的逻辑

void logStarted(Log applicationLog, StopWatch stopWatch) {
    
	if (applicationLog.isInfoEnabled()) {
    
		applicationLog.info(getStartedMessage(stopWatch));
	}
}

从这里可以猜到,这段代码主要就是打印启动耗时日志的getStartedMessage方法应该就是拼接一段日志

private CharSequence getStartedMessage(StopWatch stopWatch) {
    
	StringBuilder message = new StringBuilder();
	message.append("Started ");
	appendApplicationName(message);
	message.append(" in ");
	message.append(stopWatch.getTotalTimeMillis() / 1000.0);
	message.append(" seconds");
	try {
    
		double uptime = ManagementFactory.getRuntimeMXBean().getUptime() / 1000.0;
		message.append(" (JVM running for ").append(uptime).append(")");
	}
	catch (Throwable ex) {
    
		// No JVM time available
	}
	return message;
}

看到这段代码,彻底的验证了我们的想法是正确的,这段代码就是在评价一个字符串,作为上一个方法的输出内容

我们从启动日志最终也看到了日志的打印内容,就是我们getStartedMessage运算之后的结果
在这里插入图片描述

com.abc.Application  : Started Application in 316.903 seconds (JVM running for 587.73)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43159039/article/details/119698177

智能推荐

如何提高(编程)学习效率的三个心得感受_编程怎么学才更有效率_最早的早安227的博客-程序员宅基地

在学习的过程中,效率是极其重要的。效率能决定你学习同一件事的时间长短与记忆深浅。而很多人往往喜欢心血来潮,放言要猛学一个月,或者二十天搞定什么特殊难题,结果第一天学了一天,第二天就坚持不下去了。这是因为没有重视计划的可行性,因此效率大打折扣。学习编程也一样,那么如何分配时间才能达到事半功倍的效果呢?在学习的过程中,我总结了一些感受(个人想法)一、很多人说程序员是吃青春饭,身体是革命的本钱,健康永远要放在首位,首先要调整好自己的状态,一定不要在头晕发烧的时候学习编程,不但学不进去浪费时间,还让自己产生_编程怎么学才更有效率

WindowsUpdate_80072f8f遇到未知错误的解决_木划离的博客-程序员宅基地

之前给win7做了一些优化,导致无法更新,错误代码为80072f8f,解决方法摘自微软的官方网站,描述如下:使用自动疑难解答进行诊断Windows 8 和 Windows 7运行 Windows Update 自动化疑难解答程序。 (http://go.microsoft.com/?linkid=9830262) Windows Vista

Python3安装turtle问题_maoITker的博客-程序员宅基地

Python3.6.8安装turtle:pip3 install turtle提示错误:Collecting turtle Using cached https://files.pythonhosted.org/packages/ff/f0/21a42e9e424d24bdd0e509d5ed3c7dfb8f47d962d9c044dba903b0b4a26f/turtle-0...

如何编译TrueCrypt 7.0a源码_coolmurder的博客-程序员宅基地

转自:http://www.cppblog.com/aurain/archive/2010/11/01/132026.htmlTrueCrypt是一款开源的虚拟加密磁盘工具,目前最新版本是7.0a,本文以该版本源代码为基础,介绍了如何在VC2008下进行编译。 环境配置1. Microsoft Visual Studio 2008 SP1 (VC++ 2008) 2. Mi

mpi大规模矩阵乘法C语言,MPI多进程并行计算矩阵乘法实现_王滕昊的博客-程序员宅基地

MPI多进程并行计算矩阵乘法实现,对原始矩阵A、B进行初始化算为: 其主要思想:是把相乘的矩阵按行分解(任务分解),分别分给不同的进程,然后在汇总到一个进程上,在程序上实现则用到了主从模式,人为的把进程分为主进程和从进程,主进程负责对原始矩阵初始化赋值,并把数据均匀分发(为了负载均衡)到从进程上进行相乘运算,主要用到的知识是MPI点对点通信的机制。具体代码为:// YinXing_Matrix_m..._mpi矩阵向量乘法c语言

Java-206. 反转链表【力扣】_java206. 反转链表_LaLaLaworld的博客-程序员宅基地

反转一个单链表。示例:输入: 9->5->2->7->3->NULL输出: 3->7->2->5->9->NULL代码要求:/** * Definition for singly-linked list. * * public class ListNode {* * int val;* * List..._java206. 反转链表

随便推点

Vue和React的ECharts-Map-省市县级写法_echarts namemap_checkMa的博客-程序员宅基地

前言echarts地图的相关的资料也找了好久,市县级地图的资源资本是要积分下载的,有的10个,有的40、50个积分,10个积分能理解,但是50个就有点过分了。这里我的资料也是下载了别人的,所以大家也还是去找找只要几个积分资源吧。下面上写法Vue配置文件先在配置文件里引入echarts// The Vue build version to load with the `import` ..._echarts namemap

关于前端进行SEO优化和性能优化的想法_离城会发光的博客-程序员宅基地

今天偶然间看到掘进一片不错的关于前端进行SEO优化和性能优化的文章,感觉总结的很不错,就把搬过来的用了。附上原文链接https://juejin.im/post/5aca235a6fb9a028d567631a。seo优化 前端需要注意哪些SEO合理的title、description、keywords,搜索对着三项的权重逐渐减小,title只需强调重点,关键词不要重复超过两次,而且需要靠前,不同...

WIN10映射ubuntu1604共享目录(网络驱动器)_loongembedded的博客-程序员宅基地

WIN10映射ubuntu1604共享目录(网络驱动器)1. 安装samba安装samba:sudoapt-get install samba安装smbclient:sudoapt-get install smbclient 2. 修改samba配置文件并重启samba[home]#共享目录的名称,可根据需要来起名字comment = Shared Folder require pas...

数据结构与算法【基础版】:1.2 算法概述_狂野小白兔的博客-程序员宅基地

1.2 算法概述概述通俗:解决问题的思路是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制输入:可以提供零到多个数据输出:至少有一个结果有穷性:算法在有限的步骤(有限的执行时间)里面执行出结果确定性:写算法的时候,一个输入对应一个输出,结果是确定的(输入一个1,一会输出2一会输出3不行)可行性:写的算法要能解决实际问题正确性:算法能正确的解决问题可读性:让其他程序员能够看懂健壮性:如遇到1/0,报错时候要给用户一个提示时

H3C模拟器鼎杰_weixin_34107739的博客-程序员宅基地

R2 (e0/4/1)----- SW1----- R3(e0/4/1)<H3C>%Dec 11 17:12:57:797 2010 H3C SHELL/4/LOGIN: Console login from con0<H3C><H3C>syssysSystem View: return to Use...

Oracle rac命令汇总_oracle rac数据库命令_A Master的博客-程序员宅基地

1.srvctl,要在oracle用户下运行srvctl status database -d 数据库名 实例运行状态srvctl status instance -d 数据库名 -i 实例名 指定实例运行状态srvctl status nodeapps -n 节点名 节点应用程序状态srvctl config database –d 数据库名 显示rac数据库的配置srvctl start|stop|status instance -d <db_name> -i <in_oracle rac数据库命令

推荐文章

热门文章

相关标签