目录
🍸前言
🍻一、Actuator 了解
🍺二、使用
2.1 依赖引入
2.2 测试场景搭建
🍹三、测试
3.1 项目启动测试
3.2 服务健康检查
3.3 线程转储
3.4 内存使用,垃圾回收信息获取
💞️四、章末
🍸前言
小伙伴们大家好,之前主要是接触了 Spring EL 表达式,学习了表达式的一些语法规范,以及使用方式,并且通过本地项目测试完成结合 AOP 注解实现一些公共服务的功能,之前的文章链接在下面;今天来了解一个很熟悉却又不怎么了解的一个外部包,为什么说熟悉呢,因为是我们项目中常见的 Springboot 框架中可配置的基础依赖中的一个,但是估计很少有用到,就是提供监控和管理的 Actuator 依赖。
【Spring EL<一>✈️ 】SL 表达式的应用-CSDN博客
【Spring EL<二>✈️✈️ 】SL 表达式结合 AOP 注解实现鉴权-CSDN博客
🍻一、Actuator 了解
Spring Boot Actuator是一个用于监控和管理Spring Boot应用程序的库。提供了一系列内置的端点,用于检查应用程序的各项状态、性能指标和配置信息。使用Actuator可以轻松集成健康检查、指标收集和应用程序管理等功能。
具体功能如下:
健康检查(Health Checks):
GET
http://localhost:8081/actuator/health:返回应用程序的健康状况,包括数据库连接、消息队列等各个组件的状态,这里可以通过 Apipost 等接口测试工具发送请求应用信息(Info):
GET /actuator/info
:提供应用程序的基本信息,如版本号、构建时间等。环境属性(Environment Properties):
GET /actuator/env
:返回应用程序的环境属性,包括系统属性、环境变量和配置文件中的属性。指标(Metrics):
GET /actuator/metrics
:返回所有可用的度量指标名称。GET /actuator/metrics/{metricName}
:返回指定指标的详细信息,如内存使用、CPU使用、垃圾回收等。HTTP跟踪(HTTP Tracing):
GET /actuator/httptrace
:跟踪HTTP请求,显示最近的一些HTTP请求和响应情况。线程转储(Thread Dump):
GET /actuator/threaddump
:获取当前JVM的线程快照,有助于诊断线程相关问题。
🍺二、使用
环境准备:简易的可以启动的SpringBoot项目,postMan 接口请求工具
2.1 依赖引入
在pom.xml文件中引入以下依赖,maven 刷新下载依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
注:如果Maven工具之前没有调整的话,可能每次更新的时候回非常耗时,是因为默认地址是要访问国外的网站,速度很慢,解决方案就是使用镜像比如阿里云地址,具体配置就是修改 .xml文件中的 mirror 配置,加入以下配置之后保存,在IDEA中刷新下即可
<mirror>
<id>aliyun</id>
<name>Aliyun Maven Repository</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
2.2 测试场景搭建
2.2.1 自定义线程池
这里定义了一个全局的线程池,用于执行线程任务,方便测试信息收集
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
/**
* @author HuangBen
*/
@Configuration
public class ThreadPoolConfig {
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 配置线程池属性
executor.setCorePoolSize(10);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(30);
executor.setThreadNamePrefix("TestThread-");
executor.initialize();
return executor;
}
}
2.2.2 项目初始化打印日志
使用线程池提交一个项目启动时打印日志的任务,这里使用了 @PostConstruct 注解,注明当前bean 初始化之后执行指定的方法,也就是控制台打印日志
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
/**
* @author HuangBen
*/
@Component
public class SomeComponent {
@Resource
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@PostConstruct
public void someMethod() {
threadPoolTaskExecutor.execute(() -> {
// 任务逻辑
System.out.println("Task is running in: " + Thread.currentThread().getName());
});
}
}
🍹三、测试
3.1 项目启动测试
启动成功的话会在控制台发现自定义的线程日志
3.2 服务健康检查
这里只需发送 Get 请求,端口号注意按照自己设置的监听端口号
"status": "UP"
表示项目的健康状态为正常。也就是说各项组件和依赖项(例如数据库连接)都处于正常状态
3.3 线程转储
通过该请求可以获取项目中线程的快照,比如我们之前自定义的线程就可以查到,并且处于等待状态,因为任务执行完成后了,并且属于线程池中的核心线程并不会销毁
3.4 内存使用,垃圾回收信息获取
3.4.1 内存获取可以如下:
jvm.memory.used
- JVM 已使用的内存jvm.memory.max
- JVM 最大可用内存jvm.memory.committed
- JVM 提交的内存
3.4.2 垃圾回收信息
垃圾回收信息可以通过在 url 访问地址后面加上如下配置
jvm.gc.pause
- 垃圾回收暂停时间jvm.gc.memory.allocated
- 分配的内存量jvm.gc.live.data.size
- 存活数据大小
💞️四、章末
文章到这里就结束了~