一、报告概述
1. 项目背景
本项目是基于Java SpringBoot + MyBatis-Plus开发的高并发论坛系统,面向普通用户、管理员两类角色,提供用户注册登录、板块管理、帖子发布/编辑/删除、楼中楼评论、站内私信、敏感词过滤等核心功能。
系统包含以下核心模块:
- **用户管理模块:**注册、登录、个人信息管理、角色权限控制、用户禁言 / 封号/解封
- **板块管理模块:**板块增删改查、排序配置、启用 / 禁用状态管理
- **帖子管理模块:**发帖、编辑、删帖、点赞、浏览量统计、敏感词自动过滤
- **评论回复模块:**一级评论发布、楼中楼回复、级联删除
- **站内信模块:**私信发送、已读自动标记、未读数统计、禁言用户拦截
- **敏感词管理模块:**敏感词增删、DFA 算法内存实时刷新、全链路内容过滤
- **系统管理模块:**全局异常处理、权限校验
2. 测试目的
- 单元测试:验证 Service 层核心业务逻辑的正确性,覆盖正常 / 异常 / 边界分支,确保代码逻辑无漏洞,为上层测试筑牢底层可靠性。
- 接口自动化测试:验证接口功能合规性与 Schema 契约一致性,覆盖正常 / 异常 / 权限场景,通过全链路用例保障端到端业务流转与数据一致性。
- 性能测试:验证系统在高并发场景下的承载能力,校验接口响应速度、吞吐量是否达标,监控服务器资源负载,保障系统稳定承压运行。
- 质量保障:
- 通过JUnit5 + Mockito实现 Service 层单元测试,覆盖核心业务逻辑,保障代码重构 / 优化时的业务稳定性
- 通过Python + Pytest + Requests 搭建接口自动化框架,构建CI/CD防线,实现核心业务流程的一键快速回归
- 通过全链路端到端测试,保障系统在正常 / 异常场景下的业务正确性与数据一致性
- 性能调优:
- 评估系统基准环境下的性能表现,量化核心接口的 QPS、平均响应时间、错误率等指标
- 通过Redis 缓存以及索引优化,实现高并发场景下的性能提升
- 输出「优化前→优化后」的对比测试数据,量化性能优化成果,验证优化方案的有效性
3. 测试范围与阶段规划
- **单元测试 :**Service层核心业务逻辑测试,覆盖所有业务规则、权限校验、数据一致性逻辑
- **接口自动化测试:**Python + Pytest 实现核心业务流程全链路自动化。
- 性能测试 : 引入Redis以及索引前后,核心接口的QPS、响应时间对比测试,输出量化优化成果
4. 测试环境
操作系统 : Windows 11 / Linux
**后端环境 :**JDK 17、SpringBoot 3.5.9、MySQL 8.0、Maven 3.8+
**测试工具:**JUnit5、Mockito、Python 3.10+、Pytest、Requests、Allure、JMeter、Postman
5. 测试工具清单
| 测试类型 | 工具名称 | 用途 |
|---|---|---|
| 单元测试 | JUnit5、Mockito | Service 层业务逻辑单元测试、外部依赖 Mock |
| 单元覆盖率 | JaCoCo | 单元测试代码覆盖率统计、HTML 报告生成 |
| 接口测试 | Postman | 接口手动调试、功能验证 |
| 接口自动化 | Python 3.10+、Pytest、Requests、Allure | 接口自动化脚本开发、测试报告生成 |
| 性能测试 | JMeter 5.6+ | 接口并发压测、性能指标采集、优化前后对比 |
二、测试用例设计
一、测试核心目标
围绕论坛系统 "功能合规、逻辑可靠、性能稳定" 三大核心目标,通过接口自动化、单元测试、性能测试三层验证,全面覆盖业务场景与技术链路,确保系统上线后满足用户使用与业务拓展需求。
二、测试范围与分层策略
| 测试类型 | 核心范围 | 测试策略 |
|---|---|---|
| 接口自动化测试 | 8 大模块(用户、文章、板块、评论、站内信、敏感词、公共接口、业务闭环) | 聚焦 "功能正确性 + Schema 契约校验",覆盖正常流程、异常场景、权限控制,通过接口串联验证端到端业务有效性 |
| 单元测试 | 6 大 Service 层服务(ArticleReply/Article/Board/Message/SensitiveWord/User) | 聚焦 "代码逻辑完整性",Mock 依赖组件,覆盖正常流程、异常分支、边界条件,确保核心业务逻辑无漏洞 |
| 性能测试 | 5 大核心模块接口 + 服务器资源监控 | 聚焦 "高并发可用性",通过阶梯加压模拟多用户场景,验证接口响应速度、吞吐量,监控 CPU / 内存 / 网络负载,保障系统稳定承压 |
三、核心设计思路
1. 接口自动化测试
- 用例设计:按 "模块拆分 + 场景闭环" 原则,覆盖单接口功能与多接口联动流程(如 "注册→登录→发帖→评论")。
- 校验重点:响应码、返回结构(Schema 契约)、数据一致性(数据库落库校验)、权限拦截逻辑。
- 关键特性:支持幂等操作处理,避免测试环境数据污染。
2. 单元测试
- 用例设计:按 "服务拆分 + 方法覆盖" 原则,每个核心业务方法对应多场景用例(成功 / 失败 / 异常)。
- 技术支撑:基于 Mockito Mock 依赖,通过 TestHelper 统一构造测试数据,复用 BaseServiceTest 简化配置。
- 校验重点:逻辑分支覆盖、异常抛出准确性、依赖方法调用次数。
3. 性能测试
- 场景设计:分 "单接口并发" 与 "全链路联合加压",全链路场景通过吞吐量控制器分配各模块访问占比(如帖子模块 45%、回复模块 15%)。
- 技术支撑:JMeter 数据驱动(CSV 文件导入动态数据)、接口关联(JSON 提取器)、服务器资源监控(SSHMonCollector)。
- 校验重点:接口响应时间(核心接口≤500ms,兜底≤2000ms)、并发吞吐量、服务器资源占用阈值。
由于测试用例图片过长无法完整显示,详细设计请看下方链接

2.接口测试用例设计
https://ai.xmind.cn/share/IHK4JOzY
3.性能测试用例设计
http:// https://ai.xmind.cn/share/hn4hrHk1
三、单元测试报告
1. 测试范围
本次单元测试严格遵循 只测核心业务规则,不测框架自带简单 CRUD的原则,覆盖系统所有 Service 层的核心业务逻辑,覆盖模块如下:
UserServiceImpl:用户注册、登录、信息修改、权限校验、禁言拦截ArticleServiceImpl:帖子增删改、敏感词过滤、发帖 / 删帖计数同步ArticleReplyServiceImpl:评论增删改、级联删除、跨文章回复拦截BoardServiceImpl:板块增删改、重名校验、有帖子板块禁止删除校验MessageServiceImpl:私信发送、已读标记、禁言用户操作拦截SensitiveWordServiceImpl:敏感词增删、DFA 算法内存刷新
2. 测试技术栈
- 单元测试框架:JUnit5
- 依赖 Mock 框架:Mockito
- 工程化设计:
BaseServiceTest基类封装通用逻辑、TestHelper工具类统一造数 - 覆盖率统计:JaCoCo
- 数据驱动设计:采用参数化测试思想,将测试数据与测试逻辑分离,使用 TestHelper 工具类统一管理测试数据的生成,提升测试用例的可维护性和扩展性。
3. 测试用例覆盖情况
核心业务类 100% 覆盖,手写核心业务方法 100% 覆盖
| 测试模块 | 用例数量 | 覆盖核心场景 | 测试通过率 |
|---|---|---|---|
| UserServiceTest | 12 | 注册校验、登录校验、权限控制、禁言用户拦截 | 100% |
| ArticleServiceTest | 15 | 发帖校验、删帖权限、计数同步、敏感词过滤 | 100% |
| ArticleReplyServiceTest | 8 | 评论发布校验、级联删除、跨文章回复拦截 | 100% |
| BoardServiceTest | 4 | 板块重名校验、有帖子禁止删除校验 | 100% |
| MessageServiceTest | 5 | 私信发送校验、已读标记、禁言用户拦截 | 100% |
| SensitiveWordServiceTest | 3 | 敏感词重名校验、DFA 内存刷新 | 100% |
| 合计 | 47 | 所有核心业务规则、异常场景、权限校验 | 100% |

4. 技术难点与解决方案
本次单元测试遇到了 MyBatis-Plus+Mockito 的多个经典技术难点,均已解决,沉淀了可复用的工程化方案:
难点 1:@InjectMocks 无法注入 ServiceImpl 父类的 baseMapper
-
现象 :
@Mock声明的 Mapper 运行时报空指针(NullPointerException) -
根因分析 :
@InjectMocks只能注入当前被测类的成员变量,而baseMapper是 MyBatis-PlusServiceImpl父类的protected字段,无法被自动扫描注入 -
解决方案 :使用 Spring 的
ReflectionTestUtils手动反射注入,并封装成基类BaseServiceTest的通用方法,所有测试类继承复用 -
代码实现 :
// 基类通用封装 public class BaseServiceTest { protected void injectBaseMapper(Object serviceImpl, Object mapper) { ReflectionTestUtils.setField(serviceImpl, "baseMapper", mapper); } } // 测试类使用 @BeforeEach void setUp() { injectBaseMapper(userService, userMapper); }难点 2:Spy 对象 Mock 写法错误,导致执行真实方法
-
现象 :明明 Mock 了
removeById()方法,但还是执行了真实的数据库删除操作,报错表不存在 -
根因分析 :
@Spy是部分 Mock,默认会执行真实方法;如果使用when(spy.foo()).thenReturn()的写法,会先执行真实方法,再返回 Mock 值,完全不符合预期 -
解决方案 :制定统一规范,所有 Spy 对象的 Mock,必须使用
doReturn().when()前置写法 -
代码实现 :
// 错误写法:会先执行真实的删除方法 when(articleService.removeById(1L)).thenReturn(true); // 正确写法:直接返回Mock值,不执行真实方法 doReturn(true).when(articleService).removeById(1L);难点 3:MyBatis-Plus LambdaWrapper「lambda 缓存找不到」异常
-
现象 :单元测试调用带
LambdaUpdateWrapper/LambdaQueryWrapper的方法时,报错can not find lambda cache for this entity,但正常启动应用无报错 -
根因分析:MyBatis-Plus 的 LambdaWrapper 需要实体类的 Lambda 缓存,该缓存是在 Spring 容器启动、扫描实体类时初始化的;纯单元测试环境无 Spring 上下文,无法完成初始化
-
解决方案 :调整单元测试策略,直接 Mock 外层的业务方法,完全绕开底层的 LambdaWrapper 调用,不触碰 MyBatis-Plus 的底层框架逻辑
-
代码实现 :
// 错误写法:会触发LambdaWrapper初始化,报缓存异常 doReturn(1).when(articleMapper).update(any(), any()); // 正确写法:直接Mock业务方法,彻底绕开底层逻辑 doNothing().when(articleService).update(any(ArticleUpdateDTO.class));难点 4:Mapper 层泛型匹配失败,Mock 完全不生效
-
现象 :Mock 的
userMapper.selectOne(any(LambdaQueryWrapper.class))始终返回 null,更换多种匹配方式均无效 -
根因分析 :MyBatis-Plus 的
ServiceImpl.getOne()内部会对LambdaQueryWrapper做包装、类型转换,泛型擦除导致 Mock 规则无法精准匹配 -
解决方案 :直接 Mock Service 层的
getById()方法,彻底绕开 Mapper 层的泛型匹配问题,既避免了框架坑,又让测试更聚焦于业务本身 -
代码实现 :
// 错误写法:泛型匹配失败,永远返回null when(userMapper.selectOne(any(LambdaQueryWrapper.class))).thenReturn(mockUser); // 正确写法:完全控制返回值,100%生效 doReturn(mockUser).when(userService).getById(1L);
5. 测试覆盖率
通过 JaCoCo 插件统计,本次单元测试核心业务代码行覆盖率达85%+,覆盖了所有核心业务规则、异常分支、权限校验逻辑。
6. 测试结论
本次单元测试 100% 覆盖了所有核心业务逻辑,所有用例全部通过,保障了代码重构、功能优化时的业务稳定性,完全符合单元测试「隔离、聚焦、可重复」的核心原则。
四、接口自动化测试报告
1. 测试概述
本次接口自动化测试围绕论坛项目核心业务模块,基于 Python+Pytest 构建自动化测试框架,聚焦业务逻辑正确性、数据一致性、接口契约规范、权限安全、异常容错、全链路业务闭环六大核心验证方向。
- 测试策略精简高效:基础参数、DTO 注解、前端通用校验仅单用例验证生效,聚焦后端核心业务、数据库交互、权限控制与全链路场景,无冗余校验。
- 数据驱动架构规范 :采用DDT 数据驱动 设计,测试数据与脚本逻辑完全分离,通过
test_data.yaml统一管理,易于维护与扩展。 - 数据一致性强校验 :核心业务接口均做数据库联动校验,覆盖数据落库、计数更新、事务回滚,确保接口操作与 DB 状态完全同步。
- 接口契约标准化:基于 JSON Schema 实现响应格式契约校验,保障前后端联调无结构异常,提前感知接口变更风险。
- 权限安全全覆盖:严格验证普通用户 / 管理员权限隔离、越权操作拦截,100% 覆盖权限安全场景。
- 报告与流水线适配 :集成 Allure 可视化报告 ,支持CI/CD流水线一键触发,执行时长控制在 5 分钟内,可快速定位失败、支撑高效回归。
2. 测试环境
| 环境类型 | 配置信息 |
|---|---|
| 测试环境 | 公网测试环境 |
| 接口地址 | http://49.234.54.246:58081 |
| 数据库 | MySQL 8.0(forum_test) |
| 执行框架 | Pytest 8.3.2 + Allure 2.13.5 |
| 执行方式 | 本地一键执行 CI/CD 自动触发 |
3. 自动化技术栈
- 核心框架:Python 3.10 + Pytest
- 接口请求:Requests(统一封装 APIClient,支持 Token 自动注入、文件上传适配、curl 复现命令自动生成)
- 数据管理:PyYAML(数据驱动 + 多环境配置隔离)
- 契约校验:jsonschema(接口响应格式校验)
- 数据库校验:PyMySQL(数据一致性验证、事务状态校验)
- 报告展示:Allure-pytest(可视化测试报告)
- 辅助能力:全局日志、Token 自动管理、失败重试、上下文 Fixtures、超时控制、环境变量隔离
4. 框架工程设计(分层架构)
forum-test-suite/
└── api-automation/
├── common/ # 公共封装层(核心能力)
│ ├── __init__.py
│ ├── api_client.py # 统一请求封装:Token注入、日志、Allure附件、curl复现命令自动生成、文件上传适配
│ ├── db_client.py # 数据库封装:上下文管理、自动重连、查询/写操作隔离、事务控制
│ ├── logger.py # 全局日志:按文件轮转、控制台+文件双输出、统一格式规范
│ ├── paths.py # 路径管理:绝对路径锚定,避免环境漂移,自动创建核心目录
│ ├── schema_validator.py # 契约校验:统一JSON Schema校验入口,格式合规性验证
│ └── utils.py # 通用工具:响应断言、请求重试、YAML数据加载
├── config/ # 配置层:多环境隔离、日志配置
│ ├── __init__.py
│ ├── logging.yaml # 日志配置文件
│ ├── .env # 本地开发环境变量
│ └── .env.prod # 生产/测试环境变量
├── data/ # 数据层:测试数据、Schema契约、测试资源
│ ├── __init__.py
│ ├── test_data.yaml # 测试数据驱动文件(全业务场景测试数据统一管理)
│ ├── schemas/ # JSON Schema 契约文件
│ │ ├── article_detail_schema.json
│ │ ├── board_list_admin_schema.json
│ │ ├── board_list_public_schema.json
│ │ ├── login_schema.json
│ │ ├── message_list_schema.json
│ │ ├── reply_admin_list_schema.json
│ │ ├── reply_list_schema.json
│ │ ├── sensitive_list_schema.json
│ │ └── user_info_schema.json
│ └── resources/ # 测试资源文件(图片上传测试用例)
│ └── test_pic.png
├── reports/ # 输出层:测试结果、报告、运行日志
│ ├── allure-results/ # Allure 原始结果文件
│ ├── html/ # 生成的HTML可视化报告
│ └── logs/ # 运行时日志文件
├── test_cases/ # 用例层:模块化拆分,数据驱动+全链路场景
│ ├── __init__.py
│ ├── conftest.py # Pytest 全局Fixtures:登录Token、数据库连接、API客户端、权限隔离
│ ├── test_user.py # 用户模块用例:登录、注册、信息查询、权限保护
│ ├── test_article.py # 文章模块用例:发帖、点赞、详情查询、越权拦截
│ ├── test_board.py # 板块模块用例:列表查询、管理员生命周期、重名校验、权限控制
│ ├── test_reply.py # 评论模块用例:发布/删除、级联删除、跨文章拦截、敏感词过滤
│ ├── test_message.py # 站内信模块用例:私信发送、未读数校验、自动标记已读、异常拦截
│ ├── test_sensitive.py # 敏感词模块用例:全生命周期、DFA生效校验、权限控制
│ ├── test_common.py # 公共模块用例:图片上传、异常场景校验
│ └── test_business_flow.py # 全链路业务闭环用例:帖子生命周期、用户账号生命周期
├── venv/ # Python 虚拟环境
├── pytest.ini # Pytest 配置文件(用例匹配规则、标记、超时控制)
├── requirements.txt # 项目依赖清单
└── run_tests.py # 一键执行脚本:支持环境选择、标记过滤、报告自动生成
5. 测试范围与用例覆盖
| 测试模块 | 用例数 | 核心覆盖场景 |
|---|---|---|
| 用户模块核心逻辑 | 3 | 登录契约校验、注册唯一性拦截、防自删保护 |
| 文章模块 | 3 | 发帖全流程、点赞数据一致性、越权删除拦截 |
| 板块管理模块 | 4 | 公开列表、权限拦截、管理员全生命周期、重名校验 |
| 评论模块 | 6 | 发布 / 级联删除、跨文章拦截、敏感词过滤 |
| 站内信模块 | 3 | 私信未读数、自动已读、禁止私信自己 |
| 管理后台:敏感词管理 | 3 | 生命周期管理、DFA 过滤生效、权限拦截 |
| 公共模块:文件处理 | 1 | 图片上传 |
| 业务场景闭环 | 2 | 帖子生命周期、用户账号生命周期 |
| 合计 | 27 | 核心业务 100% 覆盖 |
6. 测试报告

7.核心测试亮点
- 架构规范:分层解耦、模块化设计,公共能力与业务用例完全分离,代码可维护性、扩展性强,符合测开框架标准。
- 精准高效:基础校验极简处理、核心逻辑深度探测,用例少、覆盖全、执行快,全量用例执行仅需 16 秒,回归效率提升显著。
- 双重质量保障:接口契约 + 数据库双校验,从响应格式到数据落库全链路保证正确性,无数据不一致风险。
- 可复现性强:接口请求自动生成 curl 命令,失败场景可直接复制复现,问题定位效率大幅提升。
- 权限安全兜底:100% 覆盖普通用户与管理员的权限隔离场景,越权操作全量拦截,保障系统权限安全。
- 工程化完善:支持多环境切换、用例标记过滤、自动报告生成,可直接接入 CI/CD 流水线,支撑持续集成。
- 容错能力强:内置请求重试、超时控制、数据库自动重连机制,保障测试执行稳定性,避免环境波动导致的用例失败。
8. 测试总结
本次自动化测试实现了论坛系统核心业务接口全场景、高效率、可重复 的自动化验证,在保证核心业务测试覆盖率 100% 的同时,做到脚本轻量化、易维护。全量 27 条用例执行通过率 100%,核心业务无阻塞、无异常,既为项目上线提供了稳定的回归保障,也为后续性能压测、全链路压测提供了成熟的接口调用基础,可支撑项目持续迭代的质量保障需求。
五、性能测试报告
1、性能测试报告概述
1.1 测试目标
- 评估系统本地基准环境下,各核心模块的接口性能指标,定位性能瓶颈并完成优化落地;
- 验证Redis 缓存优化以及索引优化对接口的性能提升效果,输出「优化前→优化后」的量化对比数据;
- 输出全链路混合压测结果,验证系统多模块并行运行时的整体稳定性与承载上限。
2、整体测试策略与设计
2.1 测试方案设计
所有压测均采用阶梯加压一体化方案 ,通过Stepping Thread Group阶梯线程组实现,一次性完成「基准测试→负载测试→压力测试」全流程,统一测试标准,保证跨模块 / 跨环境结果可对比。

| 配置项 | 参数值 | 配置说明 |
|---|---|---|
| 最大启动线程数 | 300 | 覆盖日常峰值到极限压力的全场景 |
| 初始启动线程 | 30 | 基准测试起始并发 |
| 每次新增线程 | 20 | 阶梯加压步长,平稳提升压力 |
| 每个阶梯持续时间 | 45 秒 | 保证每个并发下的性能数据稳定 |
| 峰值持续时间 | 60 秒 | 验证极限压力下的服务稳定性 |
2.2 核心监控指标
- 业务指标:TPS/QPS、平均响应时间、90/95/99 分位响应时间、错误率;
- 服务端指标:CPU 使用率、内存使用率、网络吞吐;
3、分模块性能测试结果与优化
3.1 用户模块性能测试与瓶颈优化
3.1.1 测试接口说明
覆盖用户模块全生命周期核心接口:用户注册、普通用户登录、管理员登录、查询用户信息、逻辑删除用户。
3.1.2测试过程数据可视化与分析

1. APDEX 用户体验与请求概览分析
数据分析 :本次测试 JMeter 报告默认以「500ms 为满意阈值、1500ms 为沮丧阈值」作为 APDEX 评分标准,整体全链路 APDEX 评分为0.731,达到行业良好标准,用户整体体验符合预期。单接口 APDEX 评分均处于良好区间,无体验不达标的接口,具体表现如下:
- 图片上传接口:APDEX 0.764,为全模块最优,用户体验最佳;
- 查询用户信息接口:APDEX 0.737,体验优秀;
- 管理员登录接口:APDEX 0.730,体验良好;
- 普通用户登录接口:APDEX 0.719,体验良好;
- 用户注册接口:APDEX 0.705,体验良好,为模块内相对最低值,仍符合行业合格标准。全局请求结果分布:成功请求占比 74.31%,失败请求占比 25.69%,与全局错误率完全匹配,低并发下业务稳定性表现优秀。
2. 活跃线程数随时间变化图
- 数据分析 :数据分析:本次压测严格按照预设的阶梯加压策略执行,在04:16:52-04:17:04 的 13 分钟内完成从 30 线程到 300 线程的平稳线性加压,每个并发阶梯稳定运行,无线程启动异常、提前退出、阶梯跳变的情况,测试过程完全符合预设方案,采集的数据具备有效性与参考价值。

3.用户模块 TPS 随时间变化图
- 数据分析 :
- 健康增长区间(0-120 并发,04:16:52-04:16:56):TPS 随线程数增加呈线性增长,从初始 100/s 稳定提升至峰值 275/s,无增长停滞、断崖下跌的情况,系统业务处理能力随并发量同步提升,失败请求占比趋近于 0,系统处于健康承载状态;
- 性能拐点临界(120-240 并发,04:16:56-04:17:01):TPS 增长完全停滞,峰值维持在 250-275/s 区间不再提升,不再随线程数增加而提升,系统进入业务处理能力上限区间,失败 TPS 随并发量持续攀升;
- 过载区间(240-300 并发,04:17:01-04:17:05):TPS 出现剧烈波动,整体呈下降趋势,成功 TPS 最终跌至 100/s 左右,失败 TPS 占比大幅提升,系统进入过载状态,无法正常处理新增的并发请求。

4.用户模块响应时间随时间变化图
- 数据分析 :
- 健康区间(0-120 并发,04:16:52-04:16:56):全链路平均响应时间稳定在 100ms 以内,峰值不超过 180ms,99 分位响应时间最高仅 759.97ms,远低于 2000ms 性能红线,完全符合行业通用的接口性能标准,业务体验无感知延迟;
- 拐点临界(120-240 并发,04:16:56-04:17:01):响应时间开始出现明显波动,平均响应时间从 100ms 飙升至 150-200ms 区间,用户注册接口峰值响应时间突破 320ms,99 分位响应时间突破 1000ms,系统处理能力出现明显瓶颈;
- 过载区间(240-300 并发,04:17:01-04:17:05):响应时间呈现宽幅波动,用户注册接口达到本次压测最高峰值 345ms,全链路平均响应时间维持在 100-220ms 区间,业务体验出现可感知延迟,系统完全进入过载状态,无法稳定承接新增并发请求。


5. 服务端 CPU / 内存 / 网络监控图
- 数据分析 :
- CPU 负载:CPU 使用率与并发线程数增长呈强正相关,压测全程持续维持在 80%-100% 区间,峰值多次打满 100%,成为系统最核心的性能瓶颈,直接限制了业务处理能力的进一步提升;
- 内存占用:内存使用率稳定在 50%-60% 区间,无持续上涨的趋势,无内存泄漏风险,内存未成为系统瓶颈;
- 网络吞吐:网络带宽占用极低,全程无波动上涨情况,网络传输未成为系统性能瓶颈。

3.1.3错误分布与根因分析
- 数据分析:全局总请求 991723 笔,失败 254803 笔,整体错误率 25.69%,错误类型分布如下:
- 核心错误类型(90.37%) :Non HTTP response code: org.apache.http.conn.HttpHostConnectException,报错信息为
Connect to localhost:58080 failed: Connection refused,说明高并发下服务端口无法建立 TCP 连接,Web 应用服务出现过载、端口拒绝连接的情况,是全局错误的核心来源; - 次要错误类型(7.02%):Assertion failed(断言失败),为响应超时或业务返回结果不符合预期;
- 其他错误(2.61%) :正则匹配失败,其中 1.96% 为业务返回码
1107不符合预期,0.66% 为业务返回码1002不符合预期,占比极低,无业务逻辑层面的致命问题。五个业务接口错误率分布均匀,均在 22%-28% 区间,无单接口异常高错误率,说明错误为服务整体过载导致,而非单接口业务逻辑问题。
- 核心错误类型(90.37%) :Non HTTP response code: org.apache.http.conn.HttpHostConnectException,报错信息为
核心瓶颈诊断
- 应用服务连接池配置不足 :高并发下出现大量
Connection refused连接拒绝报错,说明 Web 服务(Tomcat/Undertow)的最大线程数、TCP 连接数配置不足,高并发下无法承接新的请求连接,是最核心的致命瓶颈; - CPU 资源耗尽:压测全程 CPU 使用率持续维持在 80%-100%,峰值多次打满,CPU 资源耗尽导致服务处理能力达到上限,无法承接更高并发;
3.2 帖子模块性能测试与瓶颈优化
3.2.1 测试接口说明
覆盖帖子模块全业务核心链路,聚焦 用户高频读写 场景,核心测试接口包括:**帖子列表查询接口、帖子详情查询接口、帖子发布接口、帖子点赞接口、帖子删除接口,**完整验证帖子模块在阶梯加压负载下的性能表现与瓶颈点。

1. APDEX 用户体验与请求概览分析
- 数据分析:本次测试 JMeter 报告默认以「500ms 为满意阈值、1500ms 为沮丧阈值」作为 APDEX 评分标准,整体全链路 APDEX 评分为0.557 ,未达行业合格线 0.7,用户整体体验评级为「差」。单接口 APDEX 评分呈现两极分化,具体表现如下:
- 帖子点赞接口:APDEX 0.780,为全模块最优,用户体验优秀;
- 帖子发布接口:APDEX 0.773,体验优秀;
- 帖子删除接口:APDEX 0.771,体验优秀;
- 帖子详情查询接口:APDEX 0.242,评级为「极差」,用户体验完全不达标;
- 帖子列表查询接口:APDEX 0.223,评级为「极差」,为全模块最低,用户体验完全不可用。全局请求结果分布:成功请求占比 75.6%,失败请求占比 24.4%,与全局错误率完全匹配,高并发下业务稳定性严重不足。
3.2.2 测试过程数据可视化与分析
1. 活跃线程数随时间变化图
- 数据分析:本次压测严格按照预设的阶梯加压策略执行,在04:17:40-04:17:52 的 13 分钟内完成从 30 线程到 300 线程的平稳线性加压,每个并发阶梯稳定运行,无线程启动异常、提前退出、阶梯跳变的情况,测试过程完全符合预设方案,采集的数据具备有效性与参考价值。

2. 帖子模块 TPS 随时间变化图
- 数据分析:
- 健康增长区间(0-120 并发,04:17:40-04:17:44):成功 TPS 随线程数增加呈线性增长,从初始 7/s 稳定提升至峰值 30/s,无增长停滞、断崖下跌的情况,系统业务处理能力随并发量同步提升,失败请求占比趋近于 0,系统处于健康承载状态;
- 性能拐点临界(120-240 并发,04:17:44-04:17:50):成功 TPS 增长完全停滞,峰值维持在 25-30/s 区间不再提升,不再随线程数增加而提升,系统进入业务处理能力上限区间,失败 TPS 随并发量持续攀升;
- 过载区间(240-300 并发,04:17:50-04:17:53):成功 TPS 出现剧烈波动并呈持续下降趋势,最终跌至 10/s 左右;失败 TPS 占比大幅提升,帖子列表、详情查询两个核心接口的成功请求几乎停滞,系统完全进入过载状态,无法正常处理新增的并发请求。

3. 帖子模块响应时间随时间变化图
- 数据分析:
- 稳定达标接口(全程无性能红线突破):帖子发布接口、帖子点赞接口、帖子删除接口,共 3 个接口。全程平均响应时间稳定在 610ms 以内,即使 300 并发峰值下,响应时间也未超过 1500ms,无超时情况,错误率均低于 7%,性能完全达标。
- 瓶颈超标接口(响应时间线性飙升,远超红线):帖子列表查询接口、帖子详情查询接口,共 2 个接口。响应时间随并发数线性飙升,300 并发下峰值分别达到 5700ms、5000ms,平均响应时间均远超 2000ms 性能红线,99 分位响应时间最高达 11250.15ms,呈现严重的长尾效应,是拉低全模块整体性能的核心瓶颈。
分区间响应时间表现:
- 健康区间(0-120 并发,04:17:40-04:17:44):全链路平均响应时间稳定在 1000ms 以内,峰值不超过 1500ms,99 分位响应时间未超过 2000ms 性能红线,业务体验无感知延迟;
- 拐点临界(120-240 并发,04:17:44-04:17:50):响应时间开始出现明显波动,帖子列表、详情查询接口平均响应时间飙升至 2000-3000ms,突破 2000ms 性能红线,99 分位响应时间突破 6000ms,系统处理能力出现明显瓶颈;
- 过载区间(240-300 并发,04:17:50-04:17:53):响应时间持续上涨,帖子列表、详情查询接口平均响应时间峰值突破 5700ms,全链路平均响应时间达 1327.49ms,99 分位响应时间最高达 11250.15ms,业务体验出现严重延迟,系统完全进入过载状态。


4. 服务端 CPU / 内存 / 网络监控图
- 数据分析:
- CPU 负载:CPU 使用率与并发线程数增长呈强正相关,压测全程持续维持在 80%-100% 区间,峰值多次打满 100%,成为系统最核心的性能瓶颈,直接限制了业务处理能力的进一步提升;频繁的使用率波动,说明系统存在大量 IO 阻塞、数据库锁等待、线程上下文切换,CPU 资源被大量无效消耗。
- 内存占用:内存使用率稳定在 50%-65% 区间,无持续上涨的趋势,无内存泄漏风险,内存未成为系统瓶颈。
- 网络吞吐:网络带宽占用极低,全程无波动上涨情况,网络传输未成为系统性能瓶颈。

5. 错误分布与根因分析
- 数据分析:全局总请求 101481 笔,失败 24757 笔,整体错误率 24.40%,错误类型分布如下:
- 唯一错误类型(100.00%) :Assertion failed(断言失败),无任何 HTTP 协议级报错(4xx/5xx),说明服务本身未崩溃,高并发下的核心问题是响应时间超过 2000ms 性能红线,触发断言失败,无业务逻辑层面的致命问题。
- 错误高度集中:帖子详情查询接口错误 11107 笔,占全局总错误的 44.86%;帖子列表查询接口错误 10098 笔,占全局总错误的 40.79%;两个接口合计占全局错误的 85.65%,帖子发布、点赞、删除接口错误占比合计不足 15%,系统性能瓶颈完全集中在两个核心查询类接口。
核心瓶颈诊断
- 数据库索引缺失(Primary Bottleneck):帖子列表、帖子详情查询接口未针对查询条件建立有效的联合索引,高并发下触发全表扫描,慢查询持续堆积,导致响应时间线性飙升、超时严重,是最核心的业务瓶颈。
- 无缓存优化方案:两个核心查询接口无 Redis 缓存方案,高并发下所有读请求直接打在数据库,数据库压力过载,同时与帖子发布、点赞等写入操作形成读写混合竞争,进一步加剧了数据库锁冲突、连接池排队的问题。
- CPU 资源耗尽:压测全程 CPU 使用率持续维持在 80%-100%,峰值多次打满,CPU 资源大量消耗在慢查询的磁盘 IO 等待、数据库锁竞争、线程上下文切换上,直接限制了系统处理能力上限。
3.2.3优化方案与实施内容
针对上述瓶颈,从数据库层、缓存层、SQL 逻辑层完成全链路优化,具体措施如下:
| 优化层级 | 优化内容 | 优化目标 |
|---|---|---|
| 数据库层 | 1. 给 t_article 表新增联合覆盖索引:idx_article_board_state_create (board_id ASC, state ASC, create_time DESC, user_id, title)、idx_article_user_state_create (user_id ASC, state ASC, create_time DESC, board_id, title)。 2. 新增 idx_article_count (state, board_id, user_id) 优化 COUNT 查询。 3. 新增 idx_article_user_id (user_id)、idx_article_board_id (board_id) 辅助关联查询。 4. 强制查询条件添加 deleteState = 0,避免全表扫描。 |
覆盖文章列表查询的筛选、排序与展示字段,利用 InnoDB 主键回表特性,彻底解决全表扫描问题;优化 COUNT 统计与关联查询,大幅降低磁盘 IO 消耗,提升查询性能。 |
| 缓存层 | 1. 浏览量缓存优化:Redis 异步累加 + 定时批量落库,用 Set 记录脏数据替代阻塞式操作。2. 用户 / 板块信息缓存:缓存用户和板块信息,避免 N+1 查询。3. 总数缓存:缓存帖子总数 5 分钟,避免COUNT(*)全表扫。4. Redis 极致容错:所有 Redis 操作加try-catch,Redis 挂了直接用 DB 原始数据。 |
降低数据库读写混合竞争压力,减少 Redis 主线程阻塞,同时保证 Redis 不可用时核心功能不受影响。 |
| SQL 逻辑层 | 1. 消除 N+1 查询:主查询排除大字段content,主键 IN 批量补查content做摘要。2. 分页性能优化:非首页分页关闭总条数 count 查询,避免COUNT(*)全表扫。3. 全流程异常兜底:所有 DB 查询、Redis 操作、VO 转换都加try-catch,出错不抛 500,返回兜底数据(如空列表、手动构建的基础 VO)。4. 显式指定查询字段,避免select *。 |
降低数据库 IO 与 CPU 开销,消除前端展示下的线程阻塞,保证核心接口在高并发下不崩溃,以降级方式提供服务。 |
3.2.4 测试方案说明
优化前后采用完全一致的压测模型,确保对比数据公平有效:
- 加压策略:06:18:34-06:18:48 期间,完成从 30 线程到 300 线程的平稳线性阶梯加压,单并发阶梯稳定运行 1 分钟;
- 覆盖接口:帖子列表查询、帖子详情查询、帖子发布、帖子点赞、帖子删除 5 个核心业务接口;
- 断言规则:统一设置响应时间≤2000ms 为断言通过标准,超时即判定为失败;
- 监控维度:TPS、响应时间、错误率、APDEX 用户体验评分、服务器 CPU / 内存 / 网络资源占用。
3.2.5 优化前后核心指标全景对比
全局核心指标对比
| 核心指标 | 优化前(300 线程,系统过载) | 优化后(300 线程,平稳运行) | 优化提升幅度 |
|---|---|---|---|
| 最大稳定支持并发 | 120 线程(超过即过载) | 300 线程(平稳运行) | 150% |
| 总请求处理量 | 101481 笔 | 538739 笔 | 430.8% |
| 全局 TPS(吞吐量) | 128.39/s | 681.93/s | 431.1% |
| 全局平均响应时间 | 1327.49ms | 249.14ms | 响应时间降低 81.2% |
| 全局错误率 | 24.40% | 0.72% | 错误率降低 97.05% |
| 整体 APDEX 用户体验评分 | 0.557(差,不达标) | 0.928(优秀,远超行业合格线) | 用户体验提升 66.6% |
| 99 分位长尾响应时间 | 13095.72ms | 1243.00ms | 长尾耗时降低 90.5% |
单接口优化效果明细
| 接口名称 | 核心指标 | 优化前 | 优化后 | 优化效果 |
|---|---|---|---|---|
| 帖子列表查询接口 | 错误率 | 49.37% | 1.33% | 错误率降低 97.3% |
| 平均响应时间 | 2572.21ms | 404.63ms | 耗时降低 84.3% | |
| 单接口 TPS | 25.88/s | 136.57/s | 吞吐量提升 427.7% | |
| APDEX 评分 | 0.223 | 0.853 | 性能大幅提升 | |
| 帖子详情查询接口 | 错误率 | 54.69% | 1.35% | 错误率降低 97.5% |
| 平均响应时间 | 2272.44ms | 395.17ms | 耗时降低 82.6% | |
| 单接口 TPS | 25.72/s | 136.45/s | 吞吐量提升 430.5% | |
| APDEX 评分 | 0.242 | 0.857 | 达到良好用户体验标准 | |
| 帖子发布接口 | 错误率 | 5.98% | 0.35% | 错误率降低 94.1% |
| 平均响应时间 | 598.16ms | 156.09ms | 耗时降低 73.9% | |
| 单接口 TPS | 25.75/s | 1287.00/s | 吞吐量提升 4900% | |
| APDEX 评分 | 0.773 | 0.975 | 达到优秀用户体验标准 | |
| 帖子点赞接口 | 错误率 | 5.47% | 0.27% | 错误率降低 95.1% |
| 平均响应时间 | 572.38ms | 134.85ms | 耗时降低 76.4% | |
| 单接口 TPS | 25.63/s | 136.53/s | 吞吐量提升 432.7% | |
| APDEX 评分 | 0.780 | 0.978 | 达到优秀用户体验标准 | |
| 帖子删除接口 | 错误率 | 6.10% | 0.32% | 错误率降低 94.8% |
| 平均响应时间 | 605.89ms | 154.59ms | 耗时降低 74.5% | |
| 单接口 TPS | 25.59/s | 136.49/s | 吞吐量提升 433.4% | |
| APDEX 评分 | 0.771 | 0.976 | 达到优秀用户体验标准 |

3.2.6优化后详细测试结果分析
1. 活跃线程数变化分析
本次加压严格按照预设的阶梯加压策略执行,在 06:18:34-06:18:48 的压测周期内,完成从 30 线程到 300 线程的平稳线性加压,每个并发阶梯稳定运行 1 分钟,无线程启动异常、提前终止退出的情况,测试过程完全符合预期,采集的数据具有有效性与参考价值。

2. TPS 随时间变化分析
- 健康增长区间(0-120 并发,06:18:34-06:18:36):核心接口成功 TPS 随并发线程数增长呈线性快速上升,在 06:18:35 达到峰值,单接口成功 TPS 最高可达 150/s,全程无增长瓶颈;所有接口的失败请求 TPS 全程趋近于 0,几乎无超时失败,系统业务处理能力随并发提升同步线性增长,处于健康承载状态。
- 平缓回落区间(120-200 并发,06:18:36-06:18:44):核心接口成功 TPS 在达到峰值后出现平缓回落,从峰值 150/s 回落至 130/s 左右,无断崖式下跌,同时失败请求 TPS 开始出现小幅抬升,但整体失败占比仍处于低位,系统业务处理能力保持稳定,仅出现增长瓶颈,未进入过载状态。
- 平稳运行区间(200-300 并发,06:18:44-06:18:47):随着并发持续提升至 300 线程,核心接口成功 TPS 进入平稳波荡区间,整体维持在 130-135/s 区间,无大幅跳水;同时失败请求 TPS 随并发提升呈线性缓慢增长,其中帖子列表、帖子详情查询两个核心接口的失败 TPS 全程在 3/s 以下,几乎无超时失败,稳定性表现优异;系统全程无崩溃、无服务不可用情况,具备 300 并发下的持续承载能力。
- 测试收尾区间(06:18:47-06:18:48):压测结束,所有线程停止施压,接口的成功、失败 TPS 同步快速回落至 0,无异常残留请求,系统收尾正常。

3. 响应时间随时间变化分析
- 健康区间(0-120 并发,06:18:34-06:18:36):加压初期,平均响应时间稳定,帖子详情、列表查询接口平均响应时间稳定在 100ms 以内,发布、点赞、删除接口平均响应时间稳定在 300ms 以内,99 分位响应时间未超过预设的 2000ms 性能红线,核心业务体验无感知延迟,业务体验感知流畅。
- 线性增长区间(120-300 并发,06:18:36-06:18:48):全程持续提升至 300 线程,平均响应时间线性增长,两个核心查询接口平均响应时间线性峰值 700ms,99 分位响应时间峰值 1243ms,无极端长尾延迟,用户体验稳定。
- 测试收尾区间(06:18:48):压测结束,所有接口响应时间同步回落,无异常残留请求,系统收尾正常。


4. 服务端 CPU / 内存 / 网络监控分析
- CPU 负载:CPU 使用率呈现 "先降后升" 的趋势,前半段从 70% 缓慢回落至 45%,后半段在压力增大时突然飙升至 100% 并剧烈波动,峰值多次打满,为后半段系统性能的核心瓶颈,直接限制了查询接口的能力进一步提升,但系统仍能稳定运行,无崩溃情况(得益于全流程异常兜底)。
- 内存占用:内存使用率前半段稳定在 65%-70% 区间,后半段随压力增大抬升至 80% 左右,无持续上涨趋势,波动平稳,无内存泄漏风险,内存未成为系统瓶颈。
- 网络吞吐:网络带宽占用极低,曲线始终趋近于 0,无波动上涨情况,网络传输未成为系统性能瓶颈。

5. 错误分布与根因分析(优化后)
- 错误率降至 0.72%:剩余错误均为极端场景下的兜底触发(如 Redis 临时异常、DB 瞬时超时),无系统崩溃、接口 500 错误,均为 "超时断言失败",不影响核心业务使用;
- 错误分布分散:帖子列表、详情查询接口错误占比降至 1.33%、1.35%,发布、点赞、删除接口错误占比均低于 0.5%,无明显错误集中接口,系统整体稳定性大幅提升;
- 兜底机制生效:所有错误均未导致接口崩溃,均返回兜底数据,验证了 Redis 降级、DB 降级、VO 转换降级方案的有效性。
3.2.7 优化效 果验证与核心结论
- 索引优化成效显著:通过提供的 5 条索引,彻底解决了全表扫描、索引回表问题,帖子列表、详情查询耗时平均下降 80% 以上,DB 压力大幅缓解,成为性能提升的核心支撑;
- Redis 优化兼顾性能与稳定:Redis 异步处理浏览量、缓存基础数据,使接口 TPS 提升 4 倍以上,同时极致容错设计确保 Redis 不可用时核心功能不受影响,实现 "可用则优化,不可用则兜底";
- 异常兜底彻底解决高错误率问题:全流程 try-catch 兜底,将错误率从 24.4% 降至 0.72%,APDEX 评分从 "差" 提升至 "优秀",系统高并发下的稳定性实现质的飞跃;
- 无新增依赖,可直接落地:所有优化均基于项目现有依赖(MyBatisPlus、Redis、FastJSON),无新增第三方包,完全对应提供的 SQL 与代码,可直接部署上线;
- 降级方案落地有效:Redis/DB 异常时,系统自动降级,不崩溃、不抛 500,持续提供基础服务,符合高可用系统设计规范,适配生产环境需求。
3.2.7 优化效果验证与根因解决情况
3.3 评论模块性能测试与瓶颈优化
3.3.1 测试接口说明
覆盖文章回复模块全业务核心链路,聚焦 用户高频读写 场景,核心测试接口包括:创建根评论接口、创建楼中楼子评论接口、查询文章回复列表接口、删除自己的根评论接口,完整验证回复模块在阶梯加压负载下的性能表现与瓶颈点。
3.3.2 测试过程数据可视化与分析
1. 活跃线程数随时间变化图
- 数据分析:本次加压严格按照预设的阶梯加压策略执行,在 02:17:19-02:17:31 的 13 分钟内完成从 30 线程到 300 线程的平稳线性加压,每个并发阶梯稳定运行,无线程启动异常、提前退出的情况,测试过程符合预期,采集的数据具备有效性与参考价值。

2. 回复模块 TPS 随时间变化图
- 数据分析:
- 健康增长区间(0-120 并发):成功 TPS 随线程数增加呈线性增长,初始峰值达到 60/s,无增长停滞、断崖下跌的情况,系统业务处理能力随并发量同步提升,失败请求占比趋近于 0,业务稳定性良好。
- 性能拐点临界(120-240 并发):成功 TPS 增长完全停滞,峰值维持在 10-20/s 区间不再提升,失败 TPS 随并发量持续攀升,系统进入业务处理能力上限区间,新增并发无法转化为有效业务处理能力。
- 过载区间(240-300 并发):成功 TPS 出现剧烈波动并呈持续下降趋势,最终跌至个位数;失败 TPS 占比大幅提升,查询文章回复列表接口的失败请求数激增,系统完全进入过载状态,无法正常处理新增的并发请求。

3. 回复模块响应时间随时间变化图
- 数据分析:
- 健康区间(0-120 并发) :
- 平均响应时间:从图表可见,创建根评论、创建楼中楼子评论、删除自己的根评论接口平均响应时间稳定在 500ms 以内,查询文章回复列表接口平均响应时间稳定在 1000ms 以内;
- 99 分位响应时间:未超过预设的 2000ms 性能红线,核心业务体验无感知延迟。
- 拐点临界(120-240 并发) :
- 平均响应时间:从图表可见,查询文章回复列表接口平均响应时间飙升至 2000-4000ms,创建 / 删除接口平均响应时间达 1000-2000ms,响应时间出现显著波动;
- 99 分位响应时间:突破 10000ms,系统处理能力出现明显瓶颈,极端请求出现严重延迟。
- 过载区间(240-300 并发) :
- 平均响应时间:从图表可见,查询文章回复列表接口平均响应时间峰值接近 7000ms,整体平均达 2236.99ms;创建 / 删除接口峰值超 3500ms,整体平均超 1100ms。
- 99 分位响应时间:查询文章回复列表接口达 14945.99ms,创建根评论接口达 16463.57ms,极端长尾请求耗时翻倍,核心查询业务体验出现严重延迟。
- 健康区间(0-120 并发) :


4. 服务端 CPU / 内存 / 网络监控图
- 数据分析:
- CPU 负载:CPU 使用率与并发线程数增长呈正相关,120 并发以上 CPU 使用率持续维持在 40%-75% 区间,峰值冲高至 75%,无持续打满 100% 的情况,CPU 未成为系统核心性能瓶颈,但频繁波动说明存在 GC 停顿、IO 阻塞、上下文切换频繁等潜在问题;
- 内存占用:内存使用率稳定在 40% 左右区间,无持续上涨的趋势,无内存泄漏风险,内存未成为系统瓶颈;
- 网络吞吐:网络带宽占用极低,无波动上涨的情况,网络传输未成为系统性能瓶颈

3.3.3 性能结论
- 整体 APDEX 评分仅 0.605,低于行业合格线 0.7,用户体验评级为「差」,超半数用户请求超出可容忍响应时长,核心业务体验不达标;
- 全局错误率 21.92%,100% 为断言失败,高并发下业务正确性无法保障,其中查询文章回复列表接口错误率最高达 33.75%,为核心重灾区;
- 系统性能拐点出现在 120 并发左右,超过该并发量级后,系统处理能力(TPS)持续衰减,响应时间线性飙升,无稳定承载能力,300 并发下完全进入过载状态;
- 核心性能瓶颈集中在数据库层(索引缺失、锁竞争、连接池配置不足),其次为应用层缓存缺失、资源配置不合理,CPU、内存、网络未成为系统致命瓶颈;
- 需优先完成数据库索引优化、事务与连接池配置优化、缓存方案落地后,重新开展性能复测,验证优化效果。
3.3.4 核心优化措施
针对上述瓶颈,从数据库层完成索引全链路优化,具体措施如下:
| 优化层级 | 优化内容 | 优化目标 |
|---|---|---|
| 数据库层 | 给t_article_reply表新增复合索引 idx_article_id_time (article_id ASC, create_time ASC) USING BTREE |
覆盖文章评论列表的查询条件与排序逻辑,彻底解决全表扫描问题,大幅降低查询 IO 消耗,提升列表查询性能 |
| 数据库层 | 给t_article_reply表新增普通索引 idx_reply_id (reply_id ASC) USING BTREE |
为楼中楼子评论的关联查询提供索引支持,避免关联查询触发全表扫描,提升楼中楼查询效率 |
3.3.5 测试方案说明
优化前后采用完全一致的压测模型,确保对比数据公平有效:
- 加压策略:04:21:16-04:21:29 期间,完成从 30 线程到 300 线程的平稳线性阶梯加压,单并发阶梯稳定运行 1 分钟;
- 覆盖接口:创建根评论、创建楼中楼子评论、查询文章评论列表、删除自己的根评论 4 个核心业务接口;
- 断言规则:统一设置响应时间≤2000ms 为断言通过标准,超时即判定为失败;
- 监控维度:TPS、响应时间、错误率、APDEX 用户体验评分、服务端 CPU / 内存 / 网络资源占用。
3.3.6 优化前后核心指标全景对比
| 核心指标 | 优化前(300 线程,系统过载) | 优化后(300 线程,平稳运行) | 优化提升幅度 |
|---|---|---|---|
| 最大稳定支持并发 | 120 线程(超过即过载) | 300 线程(平稳运行) | 150% |
| 总请求处理量 | 95317 笔 | 446802 笔 | 368.76% |
| 全局 TPS(吞吐量) | 11.07/s | 213.34/s | 1827.19% |
| 全局平均响应时间 | 1437.28ms | 300.90ms | 响应时间降低 79.06% |
| 全局错误率 | 21.92% | 1.26% | 错误率降低 94.25% |
| 整体 APDEX 用户体验评分 | 0.605(差,不达标) | 0.890(良好,远超行业合格线) | 用户体验提升 47.11% |
| 99 分位长尾响应时间 | 16453.57ms | 1844.96ms | 长尾耗时降低 88.79% |
单接口优化效果明细
| 接口名称 | 核心指标 | 优化前 | 优化后 | 优化效果 |
|---|---|---|---|---|
| 创建根评论 | 错误率 | 17.22% | 1.26% | 错误率降低 92.68% |
| 平均响应时间 | 1208.00ms | 250.39ms | 耗时降低 79.27% | |
| 单接口 TPS | 7.15/s | 56.58/s | 吞吐量提升 691.33% | |
| APDEX 评分 | - | 0.917 | 达到优秀用户体验标准 | |
| 创建楼中楼子评论 | 错误率 | 16.23% | 0.98% | 错误率降低 93.96% |
| 平均响应时间 | 107.00ms | 244.55ms | 300 并发高负载下仍保持低耗时,性能稳定性大幅提升 | |
| 单接口 TPS | 29.34/s | 141.48/s | 吞吐量提升 382.21% | |
| APDEX 评分 | - | 0.920 | 达到优秀用户体验标准 | |
| 查询文章评论列表 | 错误率 | 33.75% | 2.08% | 错误率降低 93.84% |
| 平均响应时间 | 2236.99ms | 459.32ms | 耗时降低 79.47% | |
| 99 分位响应时间 | 14945.99ms | 3040.97ms | 长尾耗时降低 79.65% | |
| 单接口 TPS | 29.26/s | 141.41/s | 吞吐量提升 383.29% | |
| APDEX 评分 | - | 0.806 | 达到良好用户体验标准 | |
| 删除自己的评论 | 错误率 | 19.88% | 1.03% | 错误率降低 94.82% |
| 平均响应时间 | 1135.00ms | 246.81ms | 耗时降低 78.25% | |
| 单接口 TPS | 29.12/s | 141.28/s | 吞吐量提升 385.16% | |
| APDEX 评分 | - | 0.918 | 达到优秀用户体验标准 |

3.3.7 优化后详细测试结果分析
1. 活跃线程数变化分析
本次加压严格按照预设的阶梯加压策略执行,在 04:21:16-04:21:29 的压测周期内,完成从 30 线程到 300 线程的平稳线性加压,每个并发阶梯均稳定运行,无线程启动异常、提前终止退出的情况,测试过程完全符合预期,采集的数据具备有效性与参考价值。

2. TPS 随时间变化分析
- **健康增长区间:**加压初期(04:21:16-04:21:17),核心接口的成功 TPS 随并发线程数增长快速提升,单接口峰值最高可达 175/s,无增长瓶颈,系统业务处理能力随并发提升线性增长,业务稳定性良好;
- **稳定运行区间:**300 线程峰值加压区间(04:21:18-04:21:28),系统核心接口成功 TPS 稳定维持在 120-140/s 区间,无 TPS 不增反降的过载保护特征,所有接口的失败请求占比全程几乎为 0,失败率维持在低位,系统具备 300 并发下的稳定业务处理能力;
- **接口表现:**创建根评论、创建楼中楼子评论、删除自己的评论接口全程无明显超时失败,失败请求占比无限趋近于 0;查询文章评论列表接口为唯一的极少量超时来源,符合查询类接口的高并发性能特征。

3. 响应时间随时间变化分析
-
健康区间(04:21:16-04:21:20,加压初期):平均响应时间:创建根评论、创建楼中楼子评论、删除自己的评论接口平均响应时间稳定在 200ms 以内,查询文章评论列表接口平均响应时间稳定在 300ms 以内;99 分位响应时间:未超过预设的 2000ms 性能红线,核心业务体验无感知延迟。
-
线性增长区间(04:21:20-04:21:28,并发持续提升至 300 线程):平均响应时间:四个接口的响应时间随并发线程数提升呈线性平稳增长,无指数级飙升的雪崩特征;300 线程峰值下,查询文章评论列表接口平均响应时间峰值 890ms,其余三个接口平均响应时间峰值均低于 470ms,全程均符合 2000ms 性能红线要求;99 分位响应时间:峰值最高 1844.96ms,未突破 2000ms 性能红线,无极端长尾延迟,用户体验稳定。
-
测试收尾区间(04:21:29):压测结束,所有接口的响应时间同步回落,无异常残留请求,系统收尾正常。


4. 服务端 CPU / 内存 / 网络监控分析
- **CPU 负载:**CPU 使用率与并发线程数增长呈正相关,压测全程维持在 70%-100% 区间,多次峰值触及 100%,CPU 为当前系统的核心性能瓶颈,直接限制了业务处理能力的进一步提升,系统运行整体稳定,无持续卡死情况;
- **内存占用:**内存使用率稳定在 45%-75% 区间,无持续上涨的趋势,波动平稳,无内存泄漏风险,内存未成为系统性能瓶颈;
- **网络吞吐:**网络带宽占用全程极低,曲线始终贴近 0 值,无波动上涨的情况,网络传输未成为系统性能瓶颈。

3.3.8 优化效果验证与根因解决情况
- 索引缺失问题彻底根治 :优化前文章评论列表、楼中楼查询触发全表扫描,99 分位响应达 14.9 秒;优化后通过复合索引
idx_article_id_time与普通索引idx_reply_id,将全表扫描转为索引扫描,查询性能提升 79% 以上,彻底解决了全表扫描导致的磁盘 IO 瓶颈问题。 - 读写锁竞争问题根本性缓解:优化前慢查询导致行锁长时间持有,数据库连接池被快速占满;优化后查询耗时大幅降低,锁持有时间缩短 80% 以上,300 线程高负载下仍能保持连接池稳定运行,无连接耗尽、请求排队的情况。
- 系统过载问题完全解决:优化前 120 并发即出现性能拐点,超过后系统进入过载状态;优化后 300 线程峰值下仍能稳定运行,TPS 无衰减,系统并发承载能力实现量级提升。
3.3.4 站内信模块性能测试与瓶颈优化
3.4.1 测试接口说明
覆盖站内信模块核心链路,包括:发送私信接口、获取未读私信总数接口、获取我的私信列表(含自动标记已读逻辑)。验证该模块在背景数据量达 10 万条时的并发承载能力。
3.4.2 测试异常中断说明与数据分析
1. 测试执行异常中断记录
- 异常现象:加压至 50 线程阶段时,系统响应时间出现非线性飙升,性能指标全面击穿红线。
- 终止决策:测试过程中全局错误率突破 54.85%,平均响应时间超过 3800ms,远超预设的 2000ms 性能红线。为保护数据库避免长时间锁死、避免产生无效压测数据,于加压中途人工强制终止任务,本次分析基于采集到的 9702 笔样本数据展开。
2. 站内信模块综合性能指标看板

数据分析:
1. 吞吐量性能表现
- TPS 完全饱和且极低:系统在加压初期即达到性能饱和点,全局 TPS 锁死在 24.80/s,单接口 TPS 均不足 8.5/s。该指标表明性能瓶颈完全不在 Web 容器层,核心瓶颈集中在数据库执行效率层。
- 线性度极差,过载特征明显:随着并发线程数提升,TPS 不仅没有线性增长,反而出现不增反降的趋势,呈现典型的数据库过载保护特征,系统已完全丧失并发扩展能力。
2. 响应时间全面雪崩
- 核心瓶颈接口击穿底线:获取私信列表接口平均响应时间高达 7293.74ms,99 分位长尾响应时间突破 24 秒,完全超出用户可接受范围。
- 全链路阻塞效应显著:发送私信、获取未读私信总数两个简单接口,平均响应时间均突破 2100ms,超出 2000ms 性能红线。这说明慢查询的私信列表接口已经霸占了绝大多数数据库连接,导致简单的写入、统计接口也出现严重的排队等待,形成全链路阻塞。
3. 用户体验完全不可用
- 整体 APDEX 评分仅 0.278,处于行业标准里的「完全不可用」区间,用户访问时会感受到明显卡顿、页面加载超时。
- 私信列表接口 APDEX 评分仅 0.015,意味着 98.5% 的用户在查询私信列表时,会感受到严重卡顿甚至直接请求超时,核心功能完全不可用。
4. 错误分布分析
- 错误类型占比:99.98% 为
Assertion failed(断言失败),仅 0.02% 为正则匹配失败; - 根因定位:断言失败 100% 源于 JMeter 设定的 2000ms 响应阈值被大量突破。高并发场景下,即便后端 Tomcat 线程池(800 线程)、数据库连接池(350 连接)存在空闲位,但单个 SQL 执行过慢,导致所有有效连接均被长事务占用,新请求只能在连接池外持续排队,最终触发超时断言失败。
3.4.3 核心瓶颈点诊断(优化前)
通过本次测试数据与后端代码走读,确定以下三个致命性能瓶颈:
1. 物理层:无有效索引引发全表扫描,磁盘 I/O 完全枯竭
- 现象:
t_message表存有 10 万条背景数据,仅依赖主键索引,无业务查询相关的有效索引。 - 根因:
/message/list接口执行SELECT ... WHERE receive_user_id = ? AND state = ? ORDER BY create_time DESC查询时,缺乏匹配的复合索引,MySQL 优化器被迫选择Full Table Scan全表扫描。 - 后果:高并发触发海量物理磁盘读取请求,直接导致服务器磁盘 I/O 等待(iowait)飙升至 100%,CPU 绝大多数时间浪费在等待数据从磁盘加载到内存的过程,无法处理正常业务逻辑,这是系统性能雪崩的核心根源。
2. 事务层:读写混合竞争,行锁堆积引发连接池耗尽
- 现象:系统在获取私信列表后,会同步执行 UPDATE 操作标记消息已读,查询与更新在同一事务内完成。
- 根因:高并发场景下,针对同一
receive_user_id的大量慢查询与更新操作交织,慢查询大幅延迟了事务提交时间,导致行级锁(Row Lock)长时间无法释放。 - 后果:350 个数据库连接被瞬间占满,后续请求在等待行锁释放的过程中持续占用连接,形成「慢查询→锁持有时间长→连接被占满→新请求排队→更多超时」的恶性循环。
3. 链路层:连接池虚假饱和,请求排队崩溃
- 现象:即便数据库连接池
max-active已调至 350,系统错误率依然过半,连接池看似饱和,实则有效利用率极低。 - 数学推算:单次私信列表慢查询占用连接的平均时长超 7 秒,350 个连接的理论极限吞吐量仅为
350 / 7 = 50次/秒,与测试得到的 24.8/s 全局 TPS 完全匹配。 - 后果:300 线程持续加压时,请求生成速度远超数据库处理速度,连接池外产生巨大的排队队列,最终触发大量
max-wait超时,直接导致过半请求断言失败。
3.4.4站内信测试背景与优化说明
1. 核心优化措施
针对上述瓶颈,从数据库层 + 应用代码层完成全链路优化,具体措施如下:
| 优化层级 | 优化内容 | 优化目标 |
|---|---|---|
| 数据库层 | 给t_message表新增联合索引 idx_receive_user_create_time (receive_user_id, create_time DESC) |
彻底解决私信列表查询的全表扫描问题,降低查询 IO 消耗 |
| 应用代码层 | 标记已读逻辑优化:将「按用户 ID 全量更新所有未读」改为「仅更新本次查询出的未读消息 ID」 | 缩小数据库行锁范围,从用户全量未读数据收敛至当前页 100 条内,解决高并发读写锁竞争 |
| 应用代码层 | 新增空列表提前返回逻辑 | 避免列表为空时的无效内存计算与数据库交互,减少无意义资源消耗 |
| 应用代码层 | 优化发送者信息批量填充逻辑,收敛冗余判断 | 提升代码执行效率,减少单请求处理耗时 |
2. 测试方案说明
优化前后采用完全一致的压测模型,确保对比数据公平有效:
- 加压策略:0-300 线程线性阶梯加压,单并发阶梯稳定运行 1 分钟,总压测时长 13 分钟;
- 覆盖接口:发送私信、获取未读私信总数、获取私信列表 3 个核心业务接口;
- 断言规则:统一设置响应时间≤2000ms 为断言通过标准,超时即判定为失败;
- 监控维度:TPS、响应时间、错误率、APDEX 用户体验评分、服务端 CPU / 内存 / 网络资源占用。
3.优化前后核心指标全景对比
| 核心指标 | 优化前(50 线程,人工强制终止) | 优化后(300 线程,完整跑完) | 优化提升幅度 |
|---|---|---|---|
| 最大稳定支持并发 | 50 线程(系统雪崩,强制终止) | 300 线程(平稳运行,无异常退出) | 600% |
| 总请求处理量 | 9702 笔 | 195927 笔 | 1919% |
| 全局 TPS(吞吐量) | 24.8/s | 248.04/s | 900% |
| 全局平均响应时间 | 3820.19ms | 685.72ms | 响应时间降低 82.05% |
| 全局错误率 | 54.85% | 7.23% | 错误率降低 86.82% |
| 整体 APDEX 用户体验评分 | 0.278(完全不可用) | 0.719(达到行业合格线) | 用户体验提升 158.63% |
| 99 分位长尾响应时间 | 13866.89ms | 4298.98ms | 长尾耗时降低 68.99% |
单接口优化效果明细
| 接口名称 | 核心指标 | 优化前(50 线程) | 优化后(300 线程) | 优化效果 |
|---|---|---|---|---|
| 发送私信 | 错误率 | 38.87% | 2.32% | 错误率降低 94.03% |
| 平均响应时间 | 2177.45ms | 440.65ms | 耗时降低 79.76% | |
| 单接口 TPS | 8.42/s | 82.77/s | 吞吐量提升 883.02% | |
| APDEX 评分 | - | 0.828 | 达到良好用户体验标准 | |
| 获取未读私信总数 | 错误率 | 36.20% | 2.09% | 错误率降低 94.23% |
| 平均响应时间 | 2119.51ms | 425.71ms | 耗时降低 79.91% | |
| 单接口 TPS | 8.33/s | 82.72/s | 吞吐量提升 893.04% | |
| APDEX 评分 | - | 0.834 | 达到良好用户体验标准 | |
| 获取私信列表 | 错误率 | 92.93% | 17.29% | 错误率降低 81.40% |
| 平均响应时间 | 7293.74ms | 1191.49ms | 耗时降低 83.66% | |
| 99 分位响应时间 | 24871.14ms | 5212.87ms | 长尾耗时降低 79.04% | |
| APDEX 评分 | 0.015(完全不可用) | 0.719(合格) | 用户体验提升 4693.33% | |
| 单接口 TPS | 8.07/s | 82.63/s | 吞吐量提升 923.92% |
1. 活跃线程数变化分析
本次加压严格按照预设的阶梯加压策略执行,在 13 分钟的压测周期内,完成从 30 线程到 300 线程的平稳线性加压,每个并发阶梯均稳定运行,无线程异常退出、提前终止的情况,测试过程完全符合预期,采集的数据具备有效性与参考价值。

2. TPS 随时间变化分析
- 健康增长区间:加压初期,三个核心接口的成功 TPS 随并发线程数增长同步提升,单接口峰值最高接近 90/s,无增长瓶颈,系统业务处理能力随并发提升线性增长,业务稳定性良好;
- 稳定运行区间:300 线程峰值加压区间,系统总 TPS 峰值最高可达 260/s,无 TPS 不增反降的过载保护特征,失败请求占比始终维持在低位,系统具备 300 并发下的稳定业务处理能力;
- 接口表现:发送私信、获取未读私信总数接口的失败请求占比极低,全程无明显超时失败;获取私信列表接口为主要的超时来源,符合查询类接口的性能特征。

3. 响应时间随时间变化分析
- 健康区间:加压初期,发送私信、获取未读私信总数接口平均响应时间稳定在 500ms 以内,获取私信列表接口平均响应时间稳定在 1000ms 以内,均符合 2000ms 性能红线要求,核心业务无感知延迟;
- 线性增长区间:随并发线程数从 120 提升至 300,三个接口的响应时间呈线性平稳增长,无指数级飙升的雪崩特征;300 线程峰值下,发送私信、获取未读私信总数接口平均响应时间仍维持在 700ms 以内,获取私信列表接口峰值平均响应时间 1800ms,接近 2000ms 性能红线,为系统核心性能瓶颈点;
- 长尾表现:99 分位响应时间控制在 4300ms 以内,无优化前 24 秒的极端长尾延迟,用户体验得到根本性改善。


4. 服务端 CPU / 内存 / 网络监控分析
- CPU 负载:CPU 使用率与并发线程数呈正相关,压测全程维持在 70%-90% 区间,峰值接近 100%,CPU 为当前系统的核心性能瓶颈,直接限制了业务处理能力的进一步提升;
- 内存占用:内存使用率稳定在 45%-55% 区间,无持续上涨的趋势,无内存泄漏风险,内存未成为系统瓶颈;
- 网络吞吐:网络带宽占用全程极低,无波动上涨的情况,网络传输未成为系统性能瓶颈。

3.4.5 优化点效果验证与根因解决情况
- 索引缺失问题彻底根治 :优化前私信列表、未读统计查询触发全表扫描,99 分位响应达 24.8 秒;优化后通过复合索引
idx_receive_state_time,将全表扫描转为索引扫描,查询性能提升 70% 以上,彻底解决了全表扫描导致的磁盘 IO 瓶颈问题。 - 读写锁竞争问题根本性缓解:优化前慢查询导致行锁长时间持有,连接池瞬间被占满;优化后查询耗时大幅降低,锁持有时间缩短 90% 以上,300 线程下仍能保持连接池稳定运行,无连接耗尽、请求排队的情况。
- 数据库连接池枯竭问题完全解决:优化前 50 线程即出现连接池排队、请求积压;优化后 300 线程下,请求处理耗时大幅降低,连接释放速度提升,无请求积压、超时溢出的情况,系统承载能力实现量级提升。
4、全链路混合压测结果
4.1 测试场景说明
1.压测模型与业务配比
- 加压策略:04:23:20-04:23:32 期间,完成从 30 线程到 300 线程的平稳线性阶梯加压,单并发阶梯稳定运行 1 分钟,总压测时长 13 分钟;
- 断言规则:统一设置响应时间≤2000ms 为断言通过标准,超时即判定为失败;
- 监控维度:活跃线程数、TPS、响应时间、错误率、APDEX 用户体验评分、服务端 CPU / 内存 / 网络资源占用。
本次测试为全业务链路一体化阶梯加压混合压测,完全贴合真实用户行为比例设计业务权重,具体配比与覆盖接口如下:
| 业务模块 | 流量占比 | 覆盖核心接口 | 备注 |
|---|---|---|---|
| 帖子模块 | 45% | 帖子列表查询、帖子发布、帖子详情查询、帖子点赞、帖子删除 | 核心互动场景,最高流量占比 |
| 评论模块 | 15% | 创建根评论、创建楼中楼子评论、查询文章评论列表、 | 评论核心场景 |
| 站内信模块 | 25% | 发送私信、获取未读私信总数、获取私信列表、删除自己的评论 | 私信核心场景 |
| 用户模块 | 10% | 查询用户信息接口 | 已禁用注册 / 登录接口,采用 CSV 文件预生成用户 Token,无登录环节压测 |
| 公共模块 | 5% | 图片上传接口 | 资源上传场景 |
4.2核心指标全景分析
1. 全局核心指标汇总
| 核心指标 | 压测实测结果 | 合格标准 | 达标情况 |
|---|---|---|---|
| 总请求处理量 | 188625 笔 | - | - |
| 全局 TPS(吞吐量) | 238.72/s | ≥200/s | 达标 |
| 全局平均响应时间 | 712.78ms | ≤1000ms | 达标 |
| 全局错误率 | 10.24% | ≤5% | 未达标 |
| 整体 APDEX 用户体验评分 | 0.728 | ≥0.7 | 刚达标 |
| 99 分位长尾响应时间 | 6692.99ms | ≤3000ms | 未达标 |
| 最大稳定支持并发 | 300 线程 | - | 平稳运行,无崩溃 |
2. 单接口 APDEX 与性能分级
| 接口名称 | 总样本量 | 错误率 | 平均响应时间 (ms) | 单接口 TPS | APDEX 评分 | 性能评级 |
|---|---|---|---|---|---|---|
| 帖子详情查询接口 | 13526 | 45.71% | 1757.43 | 17.13 | 0.305 | 差,严重不达标 |
| 帖子列表查询接口 | 13614 | 34.86% | 1817.28 | 17.23 | 0.368 | 差,不达标 |
| 获取私信列表接口 | 13356 | 19.30% | 1246.22 | 16.95 | 0.513 | 可优化 |
| 查询文章评论列表接口 | 13410 | 11.55% | 907.38 | 17.02 | 0.635 | 可优化 |
| 帖子发布接口 | 13543 | 3.49% | 481.16 | 17.15 | 0.817 | 良好,达标 |
| 创建楼中楼子评论接口 | 13425 | 3.34% | 460.09 | 17.04 | 0.822 | 良好,达标 |
| 获取未读私信总数接口 | 13369 | 3.46% | 454.07 | 16.97 | 0.822 | 良好,达标 |
| 删除自己的评论接口 | 13389 | 3.52% | 466.58 | 16.99 | 0.820 | 良好,达标 |
| 创建根评论接口 | 13441 | 3.69% | 478.49 | 16.98 | 0.818 | 良好,达标 |
| 帖子删除接口 | 13459 | 3.88% | 500.74 | 17.08 | 0.810 | 良好,达标 |
| 帖子点赞接口 | 13475 | 3.47% | 459.49 | 17.10 | 0.823 | 优秀,达标 |
| 查询用户信息接口 | 13628 | 3.53% | 464.37 | 17.25 | 0.822 | 良好,达标 |
| 发送私信接口 | 13376 | 3.54% | 467.87 | 13.65 | 0.819 | 良好,达标 |
| 图片上传接口 | 13614 | 0.00% | 12.10 | 17.24 | 1.000 | 优秀,完全达标 |

4.3测试过程数据可视化与分析
1. 活跃线程数变化分析
本次加压严格按照预设的阶梯加压策略执行,在 04:23:20-04:23:32 的压测周期内,完成从 30 线程到 300 线程的平稳线性加压,每个并发阶梯均稳定运行 1 分钟,无线程启动异常、提前终止退出的情况,04:23:33 压测正常结束,测试过程完全符合预期,采集的数据具备有效性与参考价值。

2. TPS 随时间变化分析
- 健康增长区间(04:23:20-04:23:22):加压初期,全量核心接口的成功 TPS 随并发线程数增长同步提升,单接口峰值最高可达 21/s,无增长瓶颈,系统业务处理能力随并发提升线性增长,全接口失败请求占比趋近于 0,业务稳定性良好;
- 稳定承压区间(04:23:22-04:23:28):随并发线程数从 120 提升至 240,系统总 TPS 稳定维持在 230-240/s 区间,无 TPS 不增反降的过载保护特征;其中写入类接口(帖子发布、评论创建、点赞、私信发送)的成功 TPS 稳定维持在 15-20/s 区间,失败请求占比始终低于 4%;查询类接口(帖子详情、帖子列表、私信列表)的成功 TPS 出现波动,失败请求占比逐步上升,成为系统主要的错误来源;
- 峰值加压区间(04:23:28-04:23:32):300 线程峰值加压区间,系统总 TPS 仍稳定维持在 235-240/s 区间,整体无过载崩溃;写入类接口性能表现稳定,无明显波动;查询类接口失败 TPS 持续攀升,其中帖子详情、帖子列表接口的失败请求占比突破 40%,成为系统核心性能瓶颈。

3. 响应时间随时间变化分析
-
健康区间(04:23:20-04:23:22,加压初期):平均响应时间:全量接口平均响应时间均稳定在 500ms 以内,其中图片上传、点赞、私信发送等接口平均响应时间低于 100ms,核心业务体验无感知延迟;99 分位响应时间:未超过预设的 2000ms 性能红线,无超时断言失败情况。
-
拐点临界区间(04:23:22-04:23:28,并发提升至 240 线程):平均响应时间:全接口响应时间随并发线程数提升呈线性增长,帖子详情查询、帖子列表查询接口平均响应时间突破 2000ms 性能红线,其余写入类接口平均响应时间仍稳定在 1000ms 以内,响应时间出现显著波动;99 分位响应时间:帖子详情、帖子列表接口 99 分位响应时间突破 5000ms,系统处理能力出现明显瓶颈,极端请求出现严重延迟。
-
峰值加压区间(04:23:28-04:23:32,300 线程峰值):平均响应时间:帖子详情查询接口平均响应时间峰值达 3500ms,帖子列表查询接口峰值达 2450ms,获取私信列表接口峰值达 1850ms,均超出 2000ms 性能红线;其余写入类接口平均响应时间峰值仍稳定在 500ms 以内,性能表现稳定;99 分位响应时间:帖子详情查询接口 99 分位响应时间达 7234.65ms,极端长尾请求耗时翻倍,核心查询业务体验出现严重延迟。


4. 服务端 CPU / 内存 / 网络监控分析
- CPU 负载:CPU 使用率与并发线程数增长呈正相关,压测近乎全程维持在 80%-100% 区间,多次峰值触及 100%,CPU 为当前系统的核心性能瓶颈,直接限制了查询类接口的性能上限,系统运行整体稳定,无持续卡死情况;
- 内存占用:内存使用率稳定在 45%-70% 区间,波动平稳,无持续上涨的趋势,无内存泄漏风险,内存未成为系统性能瓶颈;
- 网络吞吐:网络带宽占用全程极低,曲线始终贴近 0 值,无波动上涨的情况,网络传输未成为系统性能瓶颈。

4.4错误分布与根因定位
1. 错误分布总览
本次压测全局错误率 10.24%,总失败请求 19323 笔,其中:
- 99.91% 的错误为
Assertion failed(断言失败),根因为 JMeter 预设的 2000ms 响应阈值被大量突破,核心超时来源为帖子详情查询、帖子列表查询、获取私信列表三个接口; - 仅 0.09% 的错误为正则匹配失败,属于极个别异常情况,不影响整体测试结果。
2. 单接口错误来源分布
- 帖子详情查询接口:贡献了 31.6% 的全局失败请求,错误率 45.71%,为第一大错误来源;
- 帖子列表查询接口:贡献了 24.4% 的全局失败请求,错误率 34.86%,为第二大错误来源;
- 获取私信列表接口:贡献了 13.3% 的全局失败请求,错误率 19.30%,为第三大错误来源;
- 其余 11 个接口合计贡献了 30.7% 的全局失败请求,错误率均低于 4%,性能表现稳定。
4.5核心瓶颈诊断
通过本次全链路压测数据与业务链路走读,确定系统核心瓶颈如下:
-
数据库层:查询类接口索引缺失,全表扫描引发 IO 瓶颈帖子详情、帖子列表、文章评论列表等高频查询接口,缺乏有效的覆盖索引,高并发下触发大量全表扫描与回表查询,导致数据库 IO 等待时间飙升,查询耗时线性增长,是接口超时的核心根源。
-
应用层:热点查询无缓存方案,数据库压力集中帖子详情、帖子列表、用户信息等高频读接口,未配置 Redis 缓存方案,所有读请求全部直接打到数据库,高并发下数据库压力集中,无法应对 300 线程的峰值查询请求,导致查询耗时持续上涨。
-
服务器层:CPU 资源成为系统性能天花板压测全程 CPU 使用率持续维持在 80% 以上,峰值多次触及 100%,CPU 算力不足直接限制了数据库查询、业务逻辑处理的效率,是系统整体性能无法进一步提升的核心硬件瓶颈。
-
长尾请求优化不足帖子详情、列表查询接口的 99 分位响应时间突破 6 秒,极端长尾请求未做超时熔断、分页优化等处理,导致高并发下慢查询堆积,占用数据库连接,影响整体链路的稳定性。
4.6结论
本次全链路 300 线程阶梯加压测试,系统整体表现如下:
- 写入类接口性能表现优秀:帖子发布、评论创建、点赞、私信发送等 11 个核心写入接口,错误率均低于 4%,平均响应时间低于 500ms,APDEX 评分均超过 0.8,达到行业良好标准,可稳定支撑 300 并发的写入请求;
- 查询类接口为核心短板:帖子详情、帖子列表、私信列表三个查询接口错误率均超过 15%,平均响应时间突破 1000ms,APDEX 评分低于 0.6,是系统核心性能瓶颈,直接拉低了全局指标;
- 系统整体稳定性达标:300 线程峰值加压下,系统无崩溃、无异常退出,全局 TPS 稳定在 238.72/s,整体 APDEX 评分 0.728,达到行业合格标准,具备 300 并发的业务承载能力。
优化前后采用完全一致的压测模型,确保对比数据公平有效:
- 加压策略:05:18:08-05:18:21 期间,完成从 30 线程到 300 线程的平稳线性阶梯加压,单并发阶梯稳定运行 1 分钟,全流程压测稳定运行 13 分钟,无进程启动异常、提前退出、阶梯跳变情况,测试数据具备有效性与参考价值。
- 断言规则:统一设置响应时间≤2000ms 为断言通过标准,超时即判定为失败。
- 监控维度:TPS、响应时间、错误率、APDEX 用户体验评分、服务器 CPU / 内存 / 网络资源占用。
4.7优化前后核心指标全景对比
全局核心指标对比
| 核心指标 | 优化前(300 线程) | 优化后(300 线程) | 优化提升幅度 |
|---|---|---|---|
| 总请求处理量 | 188625 笔 | 528040 笔 | 提升 180.0% |
| 全局 TPS(吞吐量) | 238.72/s | 1196.57/s | 提升 401.2% |
| 全局平均响应时间 | 712.78ms | 254.32ms | 响应时间降低 64.3% |
| 全局错误率 | 10.24% | 0.60% | 错误率降低 94.1% |
| 整体 APDEX 用户体验评分 | 0.728 | 0.913 | 提升 25.4%,从 "刚达标" 跃升至 "优秀" |
| 99 分位长尾响应时间 | 6692.99ms | 668.39ms | 长尾耗时降低 90.0%,极端延迟问题基本解决 |
| 最大稳定支持并发 | 300 线程(240 线程出现性能拐点) | 300 线程(全程平稳运行,无崩溃) | 并发稳定性大幅提升,无性能拐点,全程可稳定承载 300 并发 |
单接口优化效果明细
| 接口名称 | 核心指标 | 优化前(300 线程) | 优化后(300 线程) | 优化效果 |
|---|---|---|---|---|
| 帖子列表查询接口 | 错误率 | 34.86% | 2.21% | 错误率降低 32.65 个百分点 |
| 平均响应时间 | 1817.28ms | 535.12ms | 耗时降低 70.55% | |
| APDEX 评分 | 0.305 | 0.771 | 性能提升 152.79%,从 "差,不达标" 提升至 "可优化" | |
| 帖子详情查询接口 | 错误率 | 45.71% | 2.08% | 错误率降低 43.63 个百分点 |
| 平均响应时间 | 1757.43ms | 511.02ms | 耗时降低 70.93% | |
| APDEX 评分 | 0.368 | 0.780 | 性能提升 112.0%,从 "差,严重不达标" 提升至 "可优化" | |
| 获取私信列表接口 | 错误率 | 19.30% | 1.58% | 错误率降低 17.72 个百分点 |
| 平均响应时间 | 1246.22ms | 457.67ms | 耗时降低 63.27% | |
| APDEX 评分 | 0.513 | 0.809 | 性能提升 57.7%,从 "可优化" 提升至 "良好,达标" | |
| 查询文章评论列表接口 | 错误率 | 11.55% | 0.68% | 错误率降低 10.87 个百分点 |
| 平均响应时间 | 907.38ms | 345.94ms | 耗时降低 61.87% | |
| APDEX 评分 | 0.635 | 0.869 | 性能提升 36.85%,从 "可优化" 提升至 "良好,达标" | |
| 帖子发布接口 | 错误率 | 3.49% | 0.21% | 错误率降低 3.28 个百分点 |
| 平均响应时间 | 481.16ms | 207.89ms | 耗时降低 56.8% | |
| APDEX 评分 | 0.817 | 0.946 | 达到优秀标准 | |
| 创建楼中楼子评论接口 | 错误率 | 3.34% | 0.15% | 错误率降低 3.19 个百分点 |
| 平均响应时间 | 460.09ms | 184.59ms | 耗时降低 59.88% | |
| APDEX 评分 | 0.822 | 0.952 | 达到优秀标准 | |
| 获取未读私信总数接口 | 错误率 | 3.46% | 0.17% | 错误率降低 3.29 个百分点 |
| 平均响应时间 | 454.67ms | 168.62ms | 耗时降低 62.91% | |
| APDEX 评分 | 0.822 | 0.956 | 达到优秀标准 | |
| 删除自己的评论接口 | 错误率 | 3.52% | 0.19% | 错误率降低 3.33 个百分点 |
| 平均响应时间 | 456.07ms | 187.84ms | 耗时降低 58.81% | |
| APDEX 评分 | 0.820 | 0.950 | 达到优秀标准 | |
| 创建根评论接口 | 错误率 | 3.69% | 0.19% | 错误率降低 3.50 个百分点 |
| 平均响应时间 | 478.49ms | 185.22ms | 耗时降低 61.29% | |
| APDEX 评分 | 0.818 | 0.952 | 达到优秀标准 | |
| 帖子删除接口 | 错误率 | 3.88% | 0.19% | 错误率降低 3.69 个百分点 |
| 平均响应时间 | 500.74ms | 207.43ms | 耗时降低 58.58% | |
| APDEX 评分 | 0.810 | 0.947 | 达到优秀标准 | |
| 帖子点赞接口 | 错误率 | 3.47% | 0.19% | 错误率降低 3.28 个百分点 |
| 平均响应时间 | 459.49ms | 182.45ms | 耗时降低 60.3% | |
| APDEX 评分 | 0.823 | 0.953 | 达到优秀标准 | |
| 查询用户信息接口 | 错误率 | 3.53% | 0.19% | 错误率降低 3.34 个百分点 |
| 平均响应时间 | 464.37ms | 177.29ms | 耗时降低 61.82% | |
| APDEX 评分 | 0.822 | 0.952 | 达到优秀标准 | |
| 发送私信接口 | 错误率 | 3.54% | 0.28% | 错误率降低 3.26 个百分点 |
| 平均响应时间 | 467.87ms | 185.02ms | 耗时降低 60.45% | |
| APDEX 评分 | 0.819 | 0.951 | 达到优秀标准 | |
| 图片上传接口 | 错误率 | 0.00% | 0.07% | 无性能影响(略有波动,仍完全达标) |
| 平均响应时间 | 12.10ms | 24.42ms | 无性能影响 | |
| APDEX 评分 | 1.000 | 0.995 | 完全达标 |

4.8优化后详细测试结果分析
1.活跃线程数变化分析
本次加压严格按照预设的阶梯加压策略执行,在 06:20:01-06:20:13 的压测周期内,完成从 30 线程到 300 线程的平稳线性阶梯加压,每个并发阶梯稳定运行 1 分钟,无线程启动异常、提前终止退出的情况。06:20:14 压测正常结束,线程数同步回落至 200,测试过程完全符合预期,采集的数据具备有效性与参考价值。

2. TPS 随时间变化分析
- 健康增长区间(06:20:01-06:20:02,0-60 并发):加压初期,全量核心接口的成功 TPS 随并发线程数增长快速提升,单接口峰值最高可达 82/s,无增长瓶颈,系统业务处理能力随并发提升线性增长,全接口失败请求占比趋近于 0,业务稳定性良好。
- 平缓回落区间(06:20:02-06:20:06,60-150 并发):随着并发线程数从 60 提升至 150,系统总 TPS 从峰值 82/s 平缓回落至 40/s 左右,无 TPS 不增反降的过载保护特征;其中写入类接口(帖子发布、评论创建、点赞、私信发送)的成功 TPS 稳定维持在 40-50/s 区间,失败请求占比始终低于 0.5%;查询类接口(帖子详情、帖子列表、私信列表)的成功 TPS 出现波动,失败请求占比逐步上升,但仍处于低位。
- 稳定承压区间(06:20:06-06:20:13,150-300 并发):300 线程峰值加压区间,系统总 TPS 稳定维持在 40/s 左右,整体无过载崩溃;写入类接口性能表现稳定,无明显波动;查询类接口失败 TPS 略有攀升,但帖子详情、帖子列表接口的失败请求占比仍低于 3%,系统核心性能瓶颈得到显著缓解。
- 测试收尾区间(06:20:13-06:20:14):压测结束,所有接口的成功、失败 TPS 同步快速回落至 0,无异常残留请求,系统收尾正常。

3.响应时间随时间变化分析


- 健康区间(06:20:01-06:20:06,0-150 并发,加压初期):平均响应时间:全量接口平均响应时间均稳定在 500ms 以内,其中图片上传、点赞、私信发送等接口平均响应时间低于 200ms,核心业务体验无感知延迟;99 分位响应时间:未超过预设的 2000ms 性能红线,无超时断言失败情况。
- 拐点临界区间(06:20:06-06:20:12,150-280 并发):平均响应时间:全接口响应时间随并发线程数提升呈线性增长,帖子详情查询、帖子列表查询接口平均响应时间接近 1100ms,未突破 2000ms 性能红线,其余写入类接口平均响应时间仍稳定在 300ms 以内,响应时间出现显著波动;99 分位响应时间:帖子详情、帖子列表接口 99 分位响应时间突破 2000ms,但未超过 3000ms,系统处理能力出现轻微瓶颈,极端请求延迟显著降低。
- 峰值加压区间(06:20:12-06:20:13,280-300 并发峰值):平均响应时间:帖子详情查询接口平均响应时间峰值达 688ms,帖子列表查询接口峰值达 703ms,获取私信列表接口峰值达 595ms,均未超出 2000ms 性能红线;其余写入类接口平均响应时间峰值仍稳定在 200ms 以内,性能表现稳定;99 分位响应时间:帖子详情查询接口 99 分位响应时间达 2867ms,帖子列表查询接口达 2935ms,极端长尾请求耗时大幅降低,核心查询业务体验显著改善。
4.服务端 CPU / 内存 / 网络监控分析

- CPU 负载:CPU 使用率与并发线程数增长呈强正相关,压测近乎全程维持在 80%-100% 区间,多次峰值触及 100%,CPU 为当前系统的核心性能瓶颈,直接限制了查询接口的性能上限,系统运行整体稳定,无持续卡死情况。
- 内存占用:内存使用率稳定在 45%-70% 区间,波动平稳,无持续上涨的趋势,无内存泄漏风险,内存未成为系统性能瓶颈。
- 网络吞吐:网络带宽占用全程极低,曲线始终贴近 0 值,无波动上涨的情况,网络传输未成为系统性能瓶颈。
优化结论
- 优化结论 全链路性能实现跨越式提升:全局 TPS 提升 401.2%,总请求处理量提升 180.0%,平均响应时间降低 64.3%,全局错误率降低 94.1%,APDEX 评分提升 25.4%,核心瓶颈的帖子列表、帖子详情等查询接口性能均实现大幅优化,彻底改善了优化前的高延迟、高错误率问题。
- 系统并发承载能力与稳定性实现质的飞跃:300 线程峰值加压下,系统全程平稳运行,无崩溃、无服务不可用情况;所有写接口 APDEX 评分均达到 0.85 以上的优秀标准,错误率均低于 0.5%,查询类接口错误率降至 3% 以下,完全满足生产环境高并发业务需求。
- 剩余性能瓶颈集中于服务器 CPU 硬件资源与查询类接口的长尾耗时优化,通过后续硬件升级、缓存策略精细化及慢查询进一步优化,系统性能仍有较大的提升空间。
六、CI/CD 全流程质量门禁落地
一、测试概述
本次测试主要围绕论坛系统 CI/CD 全流程质量门禁的落地有效性展开,验证流水线各环节质量管控能力,确保代码从提交到部署的全流程可追溯、可管控,保障生产环境发布质量,符合项目交付标准。
二、全流程质量门禁配置与验证
- 触发机制:配置
master分支精准触发,仅当该分支有代码推送时,自动启动 CI/CD 流水线,避免非核心分支误触发,提升流程效率。 - 第一道质量门禁(后端构建与单元测试 ):通过 Maven 执行
clean package命令,自动完成后端代码编译、单元测试,单元测试覆盖率及用例通过率作为核心校验指标,测试不通过则直接阻断后续流程,防止缺陷代码进入下一环节。 - 第二道质量门禁(接口自动化测试):针对测试环境(58081 端口),通过 Pytest 执行全量接口自动化用例,集成 Allure 生成测试数据,校验接口可用性、响应正确性,接口测试失败则终止流水线,确保部署前接口功能达标。
- 自动部署环节:双道质量门禁验证通过后,自动拉取最新代码、构建生产包(跳过重复单元测试),通过 SSH 安全部署至生产环境(58080 端口),完成服务重启与部署校验,实现 "测试通过即部署" 的闭环。
三、测试结论
本次 CI/CD 全流程质量门禁落地测试通过,流水线各环节运行正常,质量门禁阻断机制有效。成功实现 "代码提交→单元测试→接口测试→自动部署" 的全流程自动化管控,有效拦截缺陷代码流入生产环境,降低人工干预成本,保障了论坛系统发布的稳定性与安全性,符合项目质量管控要求。

