全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 38 道配套习题

线上性能监控与压测优化专题

专题说明

本专题深入讲解SpringBoot线上应用的性能监控与压测优化技术,从Actuator指标端点到自定义健康指示器,再到线程池和连接池优化,全面掌握监控运维体系构建的核心技能。

学习目标

  1. 理解Actuator监控指标体系
  2. 掌握自定义健康指示器开发
  3. 学会线程池配置优化策略
  4. 掌握数据库连接池调优方法
  5. 理解性能瓶颈分析思路
  6. 掌握压测工具使用方法

学习内容

  • Actuator核心端点(/metrics、/health、/info、/env)
  • 自定义健康指示器(HealthIndicator接口)
  • 线程池优化(core/max配置、拒绝策略)
  • HikariCP连接池调优(minimum-idle、maximum-pool-size)
  • 性能瓶颈分析(CPU、内存、IO)
  • 常用压测工具(JMeter、wrk)

学习建议

建议先掌握Actuator的核心端点功能,再学习自定义健康指示器开发,然后深入线程池和连接池的优化配置。注意理解core=max的线程池设计原则,以及minimum-idle配置对性能的影响。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(38 题)

1
单选题

在Spring Boot Actuator中,以下哪个端点用于查看应用的核心指标信息,如JVM内存、CPU使用率等?

A

/actuator/health

B

/actuator/metrics

C

/actuator/info

D

/actuator/env

2
单选题

在Spring Boot应用中集成Prometheus监控时,需要添加哪个依赖并配置什么内容才能正确暴露Prometheus格式的指标?

A

添加micrometer-core依赖,配置management.endpoints.web.exposure.include=prometheus

B

添加micrometer-registry-prometheus依赖,配置management.endpoints.web.exposure.include=prometheus

C

添加spring-boot-starter-actuator依赖,配置management.metrics.export.prometheus.enabled=true

D

添加prometheus-client依赖,配置management.endpoint.prometheus.enabled=true

3
单选题

在Micrometer指标体系中,用于统计HTTP请求响应时间分布的指标类型是什么?该类型指标会自动计算哪些统计数据?

A

Counter,统计请求总数

B

Gauge,统计当前值

C

Timer,统计调用次数、总耗时、最大耗时和百分位分布

D

DistributionSummary,统计请求大小分布

4
多选题

在构建Spring Boot应用的监控指标体系时,以下哪些指标对于评估系统健康状态和性能瓶颈至关重要?

A

JVM堆内存使用量和GC频率

B

CPU使用率和系统负载

C

数据库连接池活跃连接数和等待队列长度

D

HTTP请求响应时间百分位值(P95、P99)

E

应用启动时间戳

F

线程池活跃线程数和队列任务数

5
多选题

在Micrometer指标体系中,合理使用标签(Tags)可以实现多维度监控分析。以下哪些是标签设计的最佳实践?

A

为每个指标添加有意义的业务维度标签,如接口路径、HTTP方法、状态码

B

使用高基数(cardinality)标签值,如用户ID、请求ID等唯一标识

C

限制标签值的可选范围,避免标签组合爆炸

D

使用统一的标签命名规范,如小写字母加下划线

E

避免在标签中包含敏感信息,如密码、token

F

为所有指标添加应用名称、实例IP等公共标签

6
判断题

在Micrometer中,MeterRegistry是指标注册中心,负责创建和管理各种Meter(Counter、Gauge、Timer等),每个Spring Boot应用通常只需要一个MeterRegistry实例。

A

B

7
判断题

Spring Boot Actuator的metrics端点采用拉取式(Pull)模式获取指标数据,这种模式相比于推送式(Push)模式,更适合云原生环境下的服务发现和动态伸缩场景。

A

B

8
单选题

以下哪种压测工具最适合用于对Spring Boot应用进行HTTP接口层面的压力测试,能够模拟大量并发用户请求?

A

JUnit

B

JMeter

C

Mockito

D

SonarQube

9
单选题

在JMeter中进行压力测试时,如果需要模拟1000个并发用户在10秒内逐渐启动并发起请求,应该配置哪种线程组?具体参数如何设置?

A

普通线程组:线程数=1000,Ramp-Up Period=10

B

普通线程组:线程数=1000,Ramp-Up Period=1,循环次数=10

C

Stepping Thread Group:初始线程=100,增量=100,间隔=1秒

D

Ultimate Thread Group:起始线程=1000,延迟=10秒

10
单选题

使用wrk工具对Spring Boot接口进行压测时,以下哪个命令可以模拟12个线程、400个连接、持续30秒的压力测试?

A

wrk -t12 -c400 -d30s http://localhost:8080/api/test

B

wrk --threads=12 --connections=400 --duration=30 http://localhost:8080/api/test

C

wrk -t 12 -c 400 -d 30 http://localhost:8080/api/test

D

wrk -T12 -C400 -D30s http://localhost:8080/api/test

11
多选题

在对Spring Boot应用进行压力测试前,以下哪些准备工作是必要的?

A

确保测试环境与生产环境配置一致或相近

B

准备足够的测试数据,避免数据量不足导致缓存命中率异常

C

关闭所有日志输出,避免IO影响测试结果

D

配置监控工具收集压测期间的系统指标

E

预热应用,让JIT编译器完成热点代码优化

F

确保网络环境稳定,避免网络延迟干扰测试

12
多选题

在Spring Boot应用的性能测试中,以下关于压测工具选择的描述哪些是正确的?

A

JMeter适合复杂的业务场景测试,支持脚本编程和多种协议

B

wrk适合快速验证接口性能,单机支持高并发HTTP测试

C

Gatling基于Scala,适合编写复杂的压测脚本,性能优异

D

ab(Apache Bench)功能强大,适合长期运行的压测场景

E

Locust基于Python,适合分布式压测和可编程场景

F

所有压测工具都支持生成HTML格式的测试报告

13
判断题

在压力测试中,TPS(Transactions Per Second)和QPS(Queries Per Second)都是衡量系统吞吐量的重要指标。对于单个HTTP接口而言,TPS等于QPS。

A

B

14
判断题

在进行压力测试时,单次测试结果就可以代表系统的真实性能水平,无需进行多次重复测试取平均值。

A

B

15
单选题

在Spring Boot应用压测过程中发现CPU使用率持续达到90%以上,但系统吞吐量没有相应提升,这种现象最可能说明什么问题?

A

应用存在频繁的CPU密集型计算,如复杂算法或死循环

B

CPU线程调度开销过大,应用线程过多导致频繁上下文切换

C

系统IO等待过高,CPU处于等待状态而非真正计算

D

JVM垃圾回收频繁,GC线程占用大量CPU资源

16
单选题

在压测过程中发现部分请求返回异常,通过日志发现线程池抛出RejectedExecutionException。分析线程池配置后发现:核心线程数=10,最大线程数=20,队列容量=100,任务处理耗时=500ms。请问在高并发场景下,如何优化线程池配置以避免拒绝异常?

A

增大队列容量到1000,让更多任务排队等待

B

将核心线程数调整为最大线程数,即core=max,避免队列等待

C

使用CallerRunsPolicy拒绝策略,让提交任务的线程执行任务

D

以上方案都不合理,应该根据系统资源重新设计整体架构

17
单选题

在Spring Boot应用压测过程中,发现系统响应时间出现周期性抖动,每隔几分钟会有大量请求延迟飙升到数秒。通过监控发现老年代使用率快速上升并触发Full GC。以下哪种优化方案可以最有效地缓解这个问题?

A

增加年轻代大小,减少对象晋升到老年代的速度

B

将垃圾收集器从CMS改为G1GC,降低Full GC停顿时间

C

减少堆内存大小,让GC更频繁但停顿更短

D

使用-XX:+DisableExplicitGC禁用显式GC调用

18
单选题

在Spring Boot应用压测中,发现数据库查询接口的响应时间P99值远高于平均值,通过分析发现存在慢SQL导致请求延迟。以下哪种方法可以最快速定位具体的慢SQL?

A

在Spring Boot中配置logging.level.org.springframework.jdbc=DEBUG查看SQL执行日志

B

开启数据库慢查询日志,设置long_query_time阈值记录慢SQL

C

使用Actuator的/actuator/metrics端点查看jdbc相关指标

D

在代码中使用JdbcTemplate的query方法手动打印SQL执行时间

19
多选题

在Spring Boot应用性能瓶颈分析中,以下哪些是需要重点关注的瓶颈点?

A

JVM内存分配不合理导致频繁GC停顿

B

数据库连接池耗尽导致请求等待或超时

C

HTTP连接池配置不当导致连接复用效率低

D

代码中存在N+1查询问题导致数据库压力过大

E

日志框架使用异步日志导致性能下降

F

线程池配置不当导致任务堆积或拒绝

20
多选题

在Spring Boot应用性能问题排查中,以下哪些APM(Application Performance Monitoring)工具可以提供链路追踪和性能分析功能?

A

SkyWalking - 国产开源APM,支持Java应用链路追踪

B

Zipkin - Twitter开源分布式追踪系统

C

Prometheus - 指标监控和告警系统

D

Jaeger - Uber开源分布式追踪系统

E

ELK Stack - 日志收集和分析平台

F

Pinpoint - 韩国开源APM,可视化服务拓扑

21
多选题

在Spring Boot应用压测报告中,响应时间统计显示:平均值=50ms,P50=45ms,P95=100ms,P99=500ms。以下哪些分析结论和优化方向是正确的?

A

P99与平均值差距过大,说明存在长尾请求,需要定位延迟原因

B

P50接近平均值说明大部分请求性能稳定,系统整体表现良好

C

应优先优化P95而非P99,因为P95代表95%的用户体验

D

P99延迟可能由GC停顿、慢SQL、外部服务超时等引起,需要链路追踪定位

E

应使用异步处理将耗时操作放到后台,减少接口响应时间

F

优化目标应设定为P99<200ms,确保99%用户体验达标

22
多选题

Spring Boot应用在长时间运行后出现内存持续增长、频繁Full GC甚至OOM现象,以下哪些诊断步骤和方法是正确的?

A

使用jmap -histo:live 查看存活对象统计,定位占用内存最多的对象类型

B

使用jmap -dump:format=b,file=heap.hprof 导出堆内存快照进行分析

C

使用MAT(Memory Analyzer Tool)或JProfiler分析堆快照,查找内存泄漏点

D

使用jstat -gcutil 持续监控GC情况,确认内存增长趋势

E

直接重启应用解决问题,无需分析根本原因

F

检查是否存在ThreadLocal未清理、静态集合无限增长等常见内存泄漏模式

23
多选题

针对Spring Boot应用性能瓶颈,以下哪些瓶颈类型与解决方案的匹配是正确的?

A

CPU使用率高但吞吐量低 → 减少线程数、优化算法、使用异步非阻塞模型

B

内存频繁Full GC → 增加堆内存、更换GC算法、减少大对象创建

C

数据库连接池耗尽 → 增加连接池大小、优化SQL减少占用时间、引入连接池监控

D

IO等待高CPU利用率低 → 使用异步IO、增加缓存减少IO、批量处理减少请求次数

E

网络带宽饱和 → 增加带宽限制、启用压缩传输、使用CDN分发静态资源

F

锁竞争导致线程阻塞 → 使用无锁算法、缩小锁范围、使用读写锁替代互斥锁

24
填空题

在Linux环境下诊断Java应用性能问题时,常用以下命令:

  1. 查看Java进程CPU使用详情的命令是:________________________
  2. 导出Java进程线程栈信息用于分析死锁或阻塞的命令是:________________________
  3. 查看Java进程内存统计信息,包括堆内存各区域使用情况的命令是:________________________
  4. 实时监控GC频率和各代内存变化趋势的命令是:________________________
25
单选题

Spring Boot 2.x版本默认使用HikariCP作为数据库连接池,请问HikariCP相比其他连接池的主要优势是什么?

A

提供丰富的监控和统计功能

B

极低的连接获取开销和高并发性能

C

支持多种数据库类型的统一管理

D

内置SQL监控和慢查询分析功能

26
单选题

在Spring Boot应用中配置HikariCP连接池,假设数据库服务器有8个CPU核心,应用有10个服务实例。根据业界最佳实践,每个实例的连接池大小应该设置为多少?

A

连接池大小=8,与CPU核心数相等

B

连接池大小=40,每实例4个连接共占用8核×5实例

C

连接池大小=10,即maximum-pool-size=10

D

连接池大小=公式计算:连接数 = (核心数 * 2) + 有效磁盘数

27
单选题

在HikariCP连接池配置中,以下哪个参数配置会导致连接池无法正常工作或性能问题?

A

maximum-pool-size=20, minimum-idle=20(两者相等)

B

maximum-pool-size=10, minimum-idle=0(最小空闲为0)

C

idle-timeout=0(设置为0)

D

connection-timeout=60000, maximum-pool-size=5(超时时间长但连接数少)

28
多选题

在Spring Boot应用中使用HikariCP连接池时,以下哪些措施可以有效预防和检测连接泄露问题?

A

配置leakDetectionThreshold参数,当连接被持有超过阈值时记录警告日志

B

使用Spring的@Transactional注解确保方法结束时自动释放连接

C

在代码中手动获取Connection后,确保在finally块中关闭连接

D

配置max-lifetime参数定期回收长连接,防止连接老化

E

使用HikariCP的JMX监控查看活跃连接数和等待获取连接的线程数

F

在所有SQL操作中使用JdbcTemplate或MyBatis框架,避免手动管理连接

29
多选题

在Spring Boot Actuator中,HikariCP连接池会自动注册以下哪些监控指标?这些指标对于诊断连接池问题有何作用?

A

hikaricp.connections.active - 当前活跃连接数,判断是否达到上限

B

hikaricp.connections.idle - 当前空闲连接数,判断是否需要扩容

C

hikaricp.connections.pending - 等待获取连接的线程数,判断是否存在连接饥饿

D

hikaricp.connections.creation - 连接创建时间,评估连接创建开销

E

hikaricp.connections.usage - 连接使用时间,评估SQL执行效率

F

hikaricp.connections.timeout - 连接获取超时次数,评估连接池是否瓶颈

30
判断题

在HikariCP连接池配置中,maximum-pool-size应该尽可能大,以确保在高并发场景下应用能够获取足够的连接,不会因连接池耗尽而阻塞请求。

A

B

31
判断题

在HikariCP连接池中,如果minimum-idle设置为0,表示连接池会在空闲时关闭所有连接,在需要时重新创建连接。这种配置在生产环境中是推荐的,可以节省数据库连接资源。

A

B

32
单选题

在Spring Boot应用中使用Spring Cache抽象,@Cacheable注解的主要作用是什么?

A

在方法执行前先检查缓存,如果存在则直接返回,不存在则执行方法并缓存结果

B

在方法执行后强制将结果存入缓存,无论缓存中是否已有数据

C

在方法执行后清除指定的缓存数据

D

配置缓存的过期时间和最大容量

33
单选题

在Spring Cache中,以下@CacheEvict配置的含义是什么?

Java
@CacheEvict(value = "products", allEntries = true, beforeInvocation = true)
public void updateAllProducts() {
    // 批量更新所有产品
}
A

在方法执行后清除products缓存中的所有条目

B

在方法执行前清除products缓存中的所有条目,确保方法执行期间缓存为空

C

在方法执行前清除products缓存中与方法参数匹配的条目

D

清除products缓存后立即重新加载所有数据

34
单选题

在使用Spring Cache时,如何设计缓存key以支持多参数组合查询?以下哪种配置是正确的?

Java
// 需求:根据userId和productId组合查询订单,缓存key应为userId+productId
A

@Cacheable(value = "orders", key = "#userId + #productId")

B

@Cacheable(value = "orders", key = "#userId::#productId")

C

@Cacheable(value = "orders", key = "'user:' + #userId + ':product:' + #productId")

D

@Cacheable(value = "orders", keyGenerator = "customKeyGenerator")

35
多选题

Spring Boot的Spring Cache抽象支持多种缓存实现,以下哪些是可以直接集成使用的缓存提供商?

A

Redis - 通过spring-boot-starter-data-redis集成

B

Ehcache - 通过配置文件和依赖集成

C

Caffeine - 高性能本地缓存,Spring Boot默认支持

D

Memcached - 需要额外依赖但Spring Cache不直接支持

E

Hazelcast - 分布式缓存,可通过依赖集成

F

ConcurrentMapCache - Spring内置的简单内存缓存

36
多选题

在Spring Boot应用中使用Spring Cache时,以下哪些策略可以保证缓存与数据库的数据一致性?

A

在更新数据库的方法上使用@CachePut注解,方法执行后更新缓存

B

在删除数据库记录的方法上使用@CacheEvict注解,清除对应缓存

C

使用@Cacheable的sync=true参数,防止缓存击穿时的并发问题

D

在批量更新后使用@CacheEvict(allEntries=true)清除整个缓存

E

使用读写分离架构,只在写库更新时清除缓存

F

设置合理的缓存过期时间,允许短暂不一致但最终一致

37
判断题

在Spring Boot应用中使用Spring Cache功能时,需要在启动类或配置类上添加@EnableCaching注解来启用缓存功能,否则@Cacheable等注解不会生效。

A

B

38
判断题

当@Cacheable注解的方法返回null时,Spring Cache会将null值也存入缓存,后续相同key的调用会直接返回缓存的null值,不会再次执行方法。

A

B

← 上一个专题 核心配置文件使用专题
下一个专题 → 自动配置原理专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库