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描述

auditevents

公开当前应用程序的审核事件信息。

beans

显示应用程序中所有Spring bean的完整列表。

caches

暴露可用的缓存。

conditions

显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。

configprops

显示所有的整理列表@ConfigurationProperties

env

露出Spring的属性ConfigurableEnvironment

flyway

显示已应用的任何Flyway数据库迁移。

health

显示应用健康信息。

httptrace

显示HTTP跟踪信息(默认情况下,最后100个HTTP请求 - 响应交换)。

info

显示任意应用信息。

integrationgraph

显示Spring Integration图。

loggers

显示和修改应用程序中记录器的配置。

liquibase

显示已应用的任何Liquibase数据库迁移。

metrics

显示当前应用程序的“指标”信息。

mappings

显示所有@RequestMapping路径的整理列表。

scheduledtasks

显示应用程序中的计划任务。

sessions

允许从Spring Session支持的会话存储中检索和删除用户会话。使用Spring Session对响应式Web应用程序的支持时不可用。

shutdown

允许应用程序正常关闭。

threaddump

执行线程转储。

如果您的应用程序是Web应用程序(Spring MVC,Spring WebFlux或Jersey),则可以使用以下附加端点:

ID描述

heapdump

返回hprof堆转储文件。

jolokia

通过HTTP公开JMX bean(当Jolokia在类路径上时,不适用于WebFlux)。

logfile

返回日志文件的内容(如果已设置logging.filelogging.path属性)。支持使用HTTP Range标头来检索部分日志文件的内容。

prometheus

以可以由Prometheus服务器抓取的格式公开指标。

要了解有关Actuator端点及其请求和响应格式的更多信息,请参阅单独的API文档(HTML或 PDF)。

访问地址:通过actuator/+端点名就可以获取相应的信息。

要更改端点暴露,使用下面的特定技术include和 exclude特性:

属性默认

management.endpoints.jmx.exposure.exclude

 

management.endpoints.jmx.exposure.include

*

management.endpoints.web.exposure.exclude

 

management.endpoints.web.exposure.include

info, health

include属性列出了公开的端点的ID。该exclude 属性列出了不应公开的端点的ID。该exclude 物业优先于该include物业。无论includeexclude 性能可与端点ID列表进行配置。

anagement.endpoints.jmx.exposure.include = health,info

例如,要停止通过JMX公开所有端点并仅显示端点health和 info端点,请使用以下属性:

management.endpoints.web.exposure.include = *

*可用于选择所有端点。例如,要通过HTTP公开除了envbeans端点之外的所有内容,请使用以下属性:

management:
  endpoints:
    web:
      exposure:
        include: "*"

 

1.4 显示健康信息细节

您可以使用运行状况信息来检查正在运行的应用程序的状态。监视软件经常使用它来在生产系统出现故障时向某人发出警报。health端点公开的信息取决于management.endpoint.health.show-details可以使用以下值之一配置的 属性:

名称描述

never

细节永远不会显示。

when-authorized

Details are only shown to authorized users. Authorized roles can be configured using management.endpoint.health.roles.

always

详细信息显示给所有用户。

默认值为never。当用户处于一个或多个端点的角色时,将被视为已获得授权。如果端点没有配置角色(默认值),则认为所有经过身份验证的用户都已获得授权。可以使用management.endpoint.health.roles属性配置角色。

[注意]

如果您已保护应用程序并希望使用always,则安全配置必须允许对经过身份验证和未经身份验证的用户访问运行状况终结点。

例如

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

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐