1.Actuator监控应用
Actuator是spring boot的一个附加功能,可帮助你在应用程序生产环境时监视和管理应用程序。可以使用HTTP的各种请求来监管,审计,收集应用的运行情况.特别对于微服务管理十分有意义.缺点:没有可视化界面。
1.1 引入maven依赖
<!--Actuator监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
1.2 演示案例自定义信息
/actuator/info 配置文件新增
info:
alen: alen
1.3 Actuator访问路径
通过actuator/+端点名就可以获取相应的信息。
端点:
ID | 描述 |
| 公开当前应用程序的审核事件信息。 |
| 显示应用程序中所有Spring bean的完整列表。 |
| 暴露可用的缓存。 |
| 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。 |
| 显示所有的整理列表 |
| 露出Spring的属性 |
| 显示已应用的任何Flyway数据库迁移。 |
| 显示应用健康信息。 |
| 显示HTTP跟踪信息(默认情况下,最后100个HTTP请求 - 响应交换)。 |
| 显示任意应用信息。 |
| 显示Spring Integration图。 |
| 显示和修改应用程序中记录器的配置。 |
| 显示已应用的任何Liquibase数据库迁移。 |
| 显示当前应用程序的“指标”信息。 |
| 显示所有 |
| 显示应用程序中的计划任务。 |
| 允许从Spring Session支持的会话存储中检索和删除用户会话。使用Spring Session对响应式Web应用程序的支持时不可用。 |
| 允许应用程序正常关闭。 |
| 执行线程转储。 |
如果您的应用程序是Web应用程序(Spring MVC,Spring WebFlux或Jersey),则可以使用以下附加端点:
ID | 描述 |
| 返回 |
| 通过HTTP公开JMX bean(当Jolokia在类路径上时,不适用于WebFlux)。 |
| 返回日志文件的内容(如果已设置 |
| 以可以由Prometheus服务器抓取的格式公开指标。 |
要了解有关Actuator端点及其请求和响应格式的更多信息,请参阅单独的API文档(HTML或 PDF)。
访问地址:通过actuator/+端点名就可以获取相应的信息。
要更改端点暴露,使用下面的特定技术include
和 exclude
特性:
属性 | 默认 |
| |
|
|
| |
|
|
该include
属性列出了公开的端点的ID。该exclude
属性列出了不应公开的端点的ID。该exclude
物业优先于该include
物业。无论include
和exclude
性能可与端点ID列表进行配置。
anagement.endpoints.jmx.exposure.include = health,info
例如,要停止通过JMX公开所有端点并仅显示端点health
和 info
端点,请使用以下属性:
management.endpoints.web.exposure.include = *
*
可用于选择所有端点。例如,要通过HTTP公开除了env
和beans
端点之外的所有内容,请使用以下属性:
management:
endpoints:
web:
exposure:
include: "*"
1.4 显示健康信息细节
您可以使用运行状况信息来检查正在运行的应用程序的状态。监视软件经常使用它来在生产系统出现故障时向某人发出警报。health
端点公开的信息取决于management.endpoint.health.show-details
可以使用以下值之一配置的 属性:
名称 | 描述 |
| 细节永远不会显示。 |
| Details are only shown to authorized users. Authorized roles can be configured using |
| 详细信息显示给所有用户。 |
默认值为never
。当用户处于一个或多个端点的角色时,将被视为已获得授权。如果端点没有配置角色(默认值),则认为所有经过身份验证的用户都已获得授权。可以使用management.endpoint.health.roles
属性配置角色。
如果您已保护应用程序并希望使用 |
例如
management:
endpoints:
web:
exposure:
include: "*"
#显示健康细节
endpoint:
health:
show-details: ALWAYS
2. Admin-UI分布式微服务监控中心
Admin-UI基于actuator实现能够返回界面展示监控信息
3.性能优化
3.1 组件自动扫描带来的问题
默认情况下,我们会使用 @SpringBootApplication 注解来自动获取应用的配置信息,但这样也会给应用带来一些副作用。使用这个注解后,会触发自动配置( auto-configuration )和 组件扫描 ( component scanning ),这跟使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解的作用是一样的。这样做给开发带来方便的同时,也会有三方面的影响:
1、会导致项目启动时间变长。当启动一个大的应用程序,或将做大量的集成测试启动应用程序时,影响会特别明显。
2、会加载一些不需要的多余的实例(beans)。
3、会增加 CPU 消耗。
针对以上三个情况,我们可以移除 @SpringBootApplication 和 @ComponentScan 两个注解来禁用组件自动扫描,然后在我们需要的 bean 上进行显式配置:
移除 @SpringBootApplication and @ComponentScan, 用 @EnableAutoConfiguration 来替代
//@SpringBootApplication
@Configuration
@EnableAutoConfiguration
public class App01 {
public static void main(String[] args) {
SpringApplication.run(App01.class, args);
}
}
以@SpringBootApplication 启动时间8.56秒
3.2 将Servlet容器变成Undertow
默认情况下,Spring Boot 使用 Tomcat 来作为内嵌的 Servlet 容器
可以将 Web 服务器切换到 Undertow 来提高应用性能。Undertow 是一个采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。Undertow 是红帽公司的开源产品,是 Wildfly 默认的 Web 服务器。首先,从依赖信息里移除 Tomcat 配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
然后添加 Undertow:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
3.3 SpringBoot JVM参数调优
这个根据服务器的内存大小,来设置堆参数。
-Xms :设置Java堆栈的初始化大小
-Xmx :设置最大的java堆大小
实例参数-XX:+PrintGCDetails -Xmx32M -Xms1M
本地项目调优
外部运行调优
java -server -Xms32m -Xmx32m -jar springboot_v2.jar
服务器名称 | 第一次运行 | 第二次运行 | 第三次运行 | 平均值 |
Tomcat | 4773 | 5194 | 5334.7 | 5100 |
Undertow | 6666 | 6373 | 6451 | 6496 |