高并发论坛系统:单元测试 + 接口自动化 + 性能测试 + CI/CD 全链路测试报告

一、报告概述

1. 项目背景

本项目是基于Java SpringBoot + MyBatis-Plus开发的高并发论坛系统,面向普通用户、管理员两类角色,提供用户注册登录、板块管理、帖子发布/编辑/删除、楼中楼评论、站内私信、敏感词过滤等核心功能。

系统包含以下核心模块:

  • **用户管理模块:**注册、登录、个人信息管理、角色权限控制、用户禁言 / 封号/解封
  • **板块管理模块:**板块增删改查、排序配置、启用 / 禁用状态管理
  • **帖子管理模块:**发帖、编辑、删帖、点赞、浏览量统计、敏感词自动过滤
  • **评论回复模块:**一级评论发布、楼中楼回复、级联删除
  • **站内信模块:**私信发送、已读自动标记、未读数统计、禁言用户拦截
  • **敏感词管理模块:**敏感词增删、DFA 算法内存实时刷新、全链路内容过滤
  • **系统管理模块:**全局异常处理、权限校验

2. 测试目的

  • 单元测试:验证 Service 层核心业务逻辑的正确性,覆盖正常 / 异常 / 边界分支,确保代码逻辑无漏洞,为上层测试筑牢底层可靠性。
  • 接口自动化测试:验证接口功能合规性与 Schema 契约一致性,覆盖正常 / 异常 / 权限场景,通过全链路用例保障端到端业务流转与数据一致性。
  • 性能测试:验证系统在高并发场景下的承载能力,校验接口响应速度、吞吐量是否达标,监控服务器资源负载,保障系统稳定承压运行。
  • 质量保障:
  1. 通过JUnit5 + Mockito实现 Service 层单元测试,覆盖核心业务逻辑,保障代码重构 / 优化时的业务稳定性
  2. 通过Python + Pytest + Requests 搭建接口自动化框架,构建CI/CD防线,实现核心业务流程的一键快速回归
  3. 通过全链路端到端测试,保障系统在正常 / 异常场景下的业务正确性与数据一致性
  • 性能调优:
  1. 评估系统基准环境下的性能表现,量化核心接口的 QPS、平均响应时间、错误率等指标
  2. 通过Redis 缓存以及索引优化,实现高并发场景下的性能提升
  3. 输出「优化前→优化后」的对比测试数据,量化性能优化成果,验证优化方案的有效性

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)、并发吞吐量、服务器资源占用阈值。

由于测试用例图片过长无法完整显示,详细设计请看下方链接

  1. 单元测试用例https://ai.xmind.cn/share/mKYX5uzo

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-Plus ServiceImpl 父类的 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 测试目标

  1. 评估系统本地基准环境下,各核心模块的接口性能指标,定位性能瓶颈并完成优化落地;
  2. 验证Redis 缓存优化以及索引优化对接口的性能提升效果,输出「优化前→优化后」的量化对比数据;
  3. 输出全链路混合压测结果,验证系统多模块并行运行时的整体稳定性与承载上限。

2、整体测试策略与设计

2.1 测试方案设计

所有压测均采用阶梯加压一体化方案 ,通过Stepping Thread Group阶梯线程组实现,一次性完成「基准测试→负载测试→压力测试」全流程,统一测试标准,保证跨模块 / 跨环境结果可对比。

配置项 参数值 配置说明
最大启动线程数 300 覆盖日常峰值到极限压力的全场景
初始启动线程 30 基准测试起始并发
每次新增线程 20 阶梯加压步长,平稳提升压力
每个阶梯持续时间 45 秒 保证每个并发下的性能数据稳定
峰值持续时间 60 秒 验证极限压力下的服务稳定性

2.2 核心监控指标

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

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

5. 服务端 CPU / 内存 / 网络监控图
  • 数据分析
    1. CPU 负载:CPU 使用率与并发线程数增长呈强正相关,压测全程持续维持在 80%-100% 区间,峰值多次打满 100%,成为系统最核心的性能瓶颈,直接限制了业务处理能力的进一步提升;
    2. 内存占用:内存使用率稳定在 50%-60% 区间,无持续上涨的趋势,无内存泄漏风险,内存未成为系统瓶颈;
    3. 网络吞吐:网络带宽占用极低,全程无波动上涨情况,网络传输未成为系统性能瓶颈。
3.1.3错误分布与根因分析
  • 数据分析:全局总请求 991723 笔,失败 254803 笔,整体错误率 25.69%,错误类型分布如下:
    1. 核心错误类型(90.37%) :Non HTTP response code: org.apache.http.conn.HttpHostConnectException,报错信息为Connect to localhost:58080 failed: Connection refused,说明高并发下服务端口无法建立 TCP 连接,Web 应用服务出现过载、端口拒绝连接的情况,是全局错误的核心来源;
    2. 次要错误类型(7.02%):Assertion failed(断言失败),为响应超时或业务返回结果不符合预期;
    3. 其他错误(2.61%) :正则匹配失败,其中 1.96% 为业务返回码1107不符合预期,0.66% 为业务返回码1002不符合预期,占比极低,无业务逻辑层面的致命问题。五个业务接口错误率分布均匀,均在 22%-28% 区间,无单接口异常高错误率,说明错误为服务整体过载导致,而非单接口业务逻辑问题。
核心瓶颈诊断
  1. 应用服务连接池配置不足 :高并发下出现大量Connection refused连接拒绝报错,说明 Web 服务(Tomcat/Undertow)的最大线程数、TCP 连接数配置不足,高并发下无法承接新的请求连接,是最核心的致命瓶颈;
  2. 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 随时间变化图
  • 数据分析:
    1. 健康增长区间(0-120 并发,04:17:40-04:17:44):成功 TPS 随线程数增加呈线性增长,从初始 7/s 稳定提升至峰值 30/s,无增长停滞、断崖下跌的情况,系统业务处理能力随并发量同步提升,失败请求占比趋近于 0,系统处于健康承载状态;
    2. 性能拐点临界(120-240 并发,04:17:44-04:17:50):成功 TPS 增长完全停滞,峰值维持在 25-30/s 区间不再提升,不再随线程数增加而提升,系统进入业务处理能力上限区间,失败 TPS 随并发量持续攀升;
    3. 过载区间(240-300 并发,04:17:50-04:17:53):成功 TPS 出现剧烈波动并呈持续下降趋势,最终跌至 10/s 左右;失败 TPS 占比大幅提升,帖子列表、详情查询两个核心接口的成功请求几乎停滞,系统完全进入过载状态,无法正常处理新增的并发请求。
3. 帖子模块响应时间随时间变化图
  • 数据分析:
    1. 稳定达标接口(全程无性能红线突破):帖子发布接口、帖子点赞接口、帖子删除接口,共 3 个接口。全程平均响应时间稳定在 610ms 以内,即使 300 并发峰值下,响应时间也未超过 1500ms,无超时情况,错误率均低于 7%,性能完全达标。
    2. 瓶颈超标接口(响应时间线性飙升,远超红线):帖子列表查询接口、帖子详情查询接口,共 2 个接口。响应时间随并发数线性飙升,300 并发下峰值分别达到 5700ms、5000ms,平均响应时间均远超 2000ms 性能红线,99 分位响应时间最高达 11250.15ms,呈现严重的长尾效应,是拉低全模块整体性能的核心瓶颈。

分区间响应时间表现:

  1. 健康区间(0-120 并发,04:17:40-04:17:44):全链路平均响应时间稳定在 1000ms 以内,峰值不超过 1500ms,99 分位响应时间未超过 2000ms 性能红线,业务体验无感知延迟;
  2. 拐点临界(120-240 并发,04:17:44-04:17:50):响应时间开始出现明显波动,帖子列表、详情查询接口平均响应时间飙升至 2000-3000ms,突破 2000ms 性能红线,99 分位响应时间突破 6000ms,系统处理能力出现明显瓶颈;
  3. 过载区间(240-300 并发,04:17:50-04:17:53):响应时间持续上涨,帖子列表、详情查询接口平均响应时间峰值突破 5700ms,全链路平均响应时间达 1327.49ms,99 分位响应时间最高达 11250.15ms,业务体验出现严重延迟,系统完全进入过载状态。
4. 服务端 CPU / 内存 / 网络监控图
  • 数据分析:
    1. CPU 负载:CPU 使用率与并发线程数增长呈强正相关,压测全程持续维持在 80%-100% 区间,峰值多次打满 100%,成为系统最核心的性能瓶颈,直接限制了业务处理能力的进一步提升;频繁的使用率波动,说明系统存在大量 IO 阻塞、数据库锁等待、线程上下文切换,CPU 资源被大量无效消耗。
    2. 内存占用:内存使用率稳定在 50%-65% 区间,无持续上涨的趋势,无内存泄漏风险,内存未成为系统瓶颈。
    3. 网络吞吐:网络带宽占用极低,全程无波动上涨情况,网络传输未成为系统性能瓶颈。
5. 错误分布与根因分析
  • 数据分析:全局总请求 101481 笔,失败 24757 笔,整体错误率 24.40%,错误类型分布如下:
    1. 唯一错误类型(100.00%) :Assertion failed(断言失败),无任何 HTTP 协议级报错(4xx/5xx),说明服务本身未崩溃,高并发下的核心问题是响应时间超过 2000ms 性能红线,触发断言失败,无业务逻辑层面的致命问题。
    2. 错误高度集中:帖子详情查询接口错误 11107 笔,占全局总错误的 44.86%;帖子列表查询接口错误 10098 笔,占全局总错误的 40.79%;两个接口合计占全局错误的 85.65%,帖子发布、点赞、删除接口错误占比合计不足 15%,系统性能瓶颈完全集中在两个核心查询类接口。
核心瓶颈诊断
  1. 数据库索引缺失(Primary Bottleneck):帖子列表、帖子详情查询接口未针对查询条件建立有效的联合索引,高并发下触发全表扫描,慢查询持续堆积,导致响应时间线性飙升、超时严重,是最核心的业务瓶颈。
  2. 无缓存优化方案:两个核心查询接口无 Redis 缓存方案,高并发下所有读请求直接打在数据库,数据库压力过载,同时与帖子发布、点赞等写入操作形成读写混合竞争,进一步加剧了数据库锁冲突、连接池排队的问题。
  3. 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 优化效 果验证与核心结论
  1. 索引优化成效显著:通过提供的 5 条索引,彻底解决了全表扫描、索引回表问题,帖子列表、详情查询耗时平均下降 80% 以上,DB 压力大幅缓解,成为性能提升的核心支撑;
  2. Redis 优化兼顾性能与稳定:Redis 异步处理浏览量、缓存基础数据,使接口 TPS 提升 4 倍以上,同时极致容错设计确保 Redis 不可用时核心功能不受影响,实现 "可用则优化,不可用则兜底";
  3. 异常兜底彻底解决高错误率问题:全流程 try-catch 兜底,将错误率从 24.4% 降至 0.72%,APDEX 评分从 "差" 提升至 "优秀",系统高并发下的稳定性实现质的飞跃;
  4. 无新增依赖,可直接落地:所有优化均基于项目现有依赖(MyBatisPlus、Redis、FastJSON),无新增第三方包,完全对应提供的 SQL 与代码,可直接部署上线;
  5. 降级方案落地有效: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 随时间变化图
  • 数据分析:
    1. 健康增长区间(0-120 并发):成功 TPS 随线程数增加呈线性增长,初始峰值达到 60/s,无增长停滞、断崖下跌的情况,系统业务处理能力随并发量同步提升,失败请求占比趋近于 0,业务稳定性良好。
    2. 性能拐点临界(120-240 并发):成功 TPS 增长完全停滞,峰值维持在 10-20/s 区间不再提升,失败 TPS 随并发量持续攀升,系统进入业务处理能力上限区间,新增并发无法转化为有效业务处理能力。
    3. 过载区间(240-300 并发):成功 TPS 出现剧烈波动并呈持续下降趋势,最终跌至个位数;失败 TPS 占比大幅提升,查询文章回复列表接口的失败请求数激增,系统完全进入过载状态,无法正常处理新增的并发请求。
3. 回复模块响应时间随时间变化图
  • 数据分析:
    1. 健康区间(0-120 并发)
      • 平均响应时间:从图表可见,创建根评论、创建楼中楼子评论、删除自己的根评论接口平均响应时间稳定在 500ms 以内,查询文章回复列表接口平均响应时间稳定在 1000ms 以内;
      • 99 分位响应时间:未超过预设的 2000ms 性能红线,核心业务体验无感知延迟。
    2. 拐点临界(120-240 并发)
      • 平均响应时间:从图表可见,查询文章回复列表接口平均响应时间飙升至 2000-4000ms,创建 / 删除接口平均响应时间达 1000-2000ms,响应时间出现显著波动;
      • 99 分位响应时间:突破 10000ms,系统处理能力出现明显瓶颈,极端请求出现严重延迟。
    3. 过载区间(240-300 并发)
      • 平均响应时间:从图表可见,查询文章回复列表接口平均响应时间峰值接近 7000ms,整体平均达 2236.99ms;创建 / 删除接口峰值超 3500ms,整体平均超 1100ms。
      • 99 分位响应时间:查询文章回复列表接口达 14945.99ms,创建根评论接口达 16463.57ms,极端长尾请求耗时翻倍,核心查询业务体验出现严重延迟。
4. 服务端 CPU / 内存 / 网络监控图
  • 数据分析:
    1. CPU 负载:CPU 使用率与并发线程数增长呈正相关,120 并发以上 CPU 使用率持续维持在 40%-75% 区间,峰值冲高至 75%,无持续打满 100% 的情况,CPU 未成为系统核心性能瓶颈,但频繁波动说明存在 GC 停顿、IO 阻塞、上下文切换频繁等潜在问题;
    2. 内存占用:内存使用率稳定在 40% 左右区间,无持续上涨的趋势,无内存泄漏风险,内存未成为系统瓶颈;
    3. 网络吞吐:网络带宽占用极低,无波动上涨的情况,网络传输未成为系统性能瓶颈
3.3.3 性能结论
  1. 整体 APDEX 评分仅 0.605,低于行业合格线 0.7,用户体验评级为「差」,超半数用户请求超出可容忍响应时长,核心业务体验不达标;
  2. 全局错误率 21.92%,100% 为断言失败,高并发下业务正确性无法保障,其中查询文章回复列表接口错误率最高达 33.75%,为核心重灾区;
  3. 系统性能拐点出现在 120 并发左右,超过该并发量级后,系统处理能力(TPS)持续衰减,响应时间线性飙升,无稳定承载能力,300 并发下完全进入过载状态;
  4. 核心性能瓶颈集中在数据库层(索引缺失、锁竞争、连接池配置不足),其次为应用层缓存缺失、资源配置不合理,CPU、内存、网络未成为系统致命瓶颈;
  5. 需优先完成数据库索引优化、事务与连接池配置优化、缓存方案落地后,重新开展性能复测,验证优化效果。
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 优化效果验证与根因解决情况
  1. 索引缺失问题彻底根治 :优化前文章评论列表、楼中楼查询触发全表扫描,99 分位响应达 14.9 秒;优化后通过复合索引idx_article_id_time与普通索引idx_reply_id,将全表扫描转为索引扫描,查询性能提升 79% 以上,彻底解决了全表扫描导致的磁盘 IO 瓶颈问题。
  2. 读写锁竞争问题根本性缓解:优化前慢查询导致行锁长时间持有,数据库连接池被快速占满;优化后查询耗时大幅降低,锁持有时间缩短 80% 以上,300 线程高负载下仍能保持连接池稳定运行,无连接耗尽、请求排队的情况。
  3. 系统过载问题完全解决:优化前 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 优化点效果验证与根因解决情况
  1. 索引缺失问题彻底根治 :优化前私信列表、未读统计查询触发全表扫描,99 分位响应达 24.8 秒;优化后通过复合索引idx_receive_state_time,将全表扫描转为索引扫描,查询性能提升 70% 以上,彻底解决了全表扫描导致的磁盘 IO 瓶颈问题。
  2. 读写锁竞争问题根本性缓解:优化前慢查询导致行锁长时间持有,连接池瞬间被占满;优化后查询耗时大幅降低,锁持有时间缩短 90% 以上,300 线程下仍能保持连接池稳定运行,无连接耗尽、请求排队的情况。
  3. 数据库连接池枯竭问题完全解决:优化前 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核心瓶颈诊断

通过本次全链路压测数据与业务链路走读,确定系统核心瓶颈如下:

  1. 数据库层:查询类接口索引缺失,全表扫描引发 IO 瓶颈帖子详情、帖子列表、文章评论列表等高频查询接口,缺乏有效的覆盖索引,高并发下触发大量全表扫描与回表查询,导致数据库 IO 等待时间飙升,查询耗时线性增长,是接口超时的核心根源。

  2. 应用层:热点查询无缓存方案,数据库压力集中帖子详情、帖子列表、用户信息等高频读接口,未配置 Redis 缓存方案,所有读请求全部直接打到数据库,高并发下数据库压力集中,无法应对 300 线程的峰值查询请求,导致查询耗时持续上涨。

  3. 服务器层:CPU 资源成为系统性能天花板压测全程 CPU 使用率持续维持在 80% 以上,峰值多次触及 100%,CPU 算力不足直接限制了数据库查询、业务逻辑处理的效率,是系统整体性能无法进一步提升的核心硬件瓶颈。

  4. 长尾请求优化不足帖子详情、列表查询接口的 99 分位响应时间突破 6 秒,极端长尾请求未做超时熔断、分页优化等处理,导致高并发下慢查询堆积,占用数据库连接,影响整体链路的稳定性。


4.6结论

本次全链路 300 线程阶梯加压测试,系统整体表现如下:

  1. 写入类接口性能表现优秀:帖子发布、评论创建、点赞、私信发送等 11 个核心写入接口,错误率均低于 4%,平均响应时间低于 500ms,APDEX 评分均超过 0.8,达到行业良好标准,可稳定支撑 300 并发的写入请求;
  2. 查询类接口为核心短板:帖子详情、帖子列表、私信列表三个查询接口错误率均超过 15%,平均响应时间突破 1000ms,APDEX 评分低于 0.6,是系统核心性能瓶颈,直接拉低了全局指标;
  3. 系统整体稳定性达标:300 线程峰值加压下,系统无崩溃、无异常退出,全局 TPS 稳定在 238.72/s,整体 APDEX 评分 0.728,达到行业合格标准,具备 300 并发的业务承载能力。

优化前后采用完全一致的压测模型,确保对比数据公平有效:

  1. 加压策略:05:18:08-05:18:21 期间,完成从 30 线程到 300 线程的平稳线性阶梯加压,单并发阶梯稳定运行 1 分钟,全流程压测稳定运行 13 分钟,无进程启动异常、提前退出、阶梯跳变情况,测试数据具备有效性与参考价值。
  2. 断言规则:统一设置响应时间≤2000ms 为断言通过标准,超时即判定为失败。
  3. 监控维度: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 值,无波动上涨的情况,网络传输未成为系统性能瓶颈。
优化结论
  1. 优化结论 全链路性能实现跨越式提升:全局 TPS 提升 401.2%,总请求处理量提升 180.0%,平均响应时间降低 64.3%,全局错误率降低 94.1%,APDEX 评分提升 25.4%,核心瓶颈的帖子列表、帖子详情等查询接口性能均实现大幅优化,彻底改善了优化前的高延迟、高错误率问题。
  2. 系统并发承载能力与稳定性实现质的飞跃:300 线程峰值加压下,系统全程平稳运行,无崩溃、无服务不可用情况;所有写接口 APDEX 评分均达到 0.85 以上的优秀标准,错误率均低于 0.5%,查询类接口错误率降至 3% 以下,完全满足生产环境高并发业务需求。
  3. 剩余性能瓶颈集中于服务器 CPU 硬件资源与查询类接口的长尾耗时优化,通过后续硬件升级、缓存策略精细化及慢查询进一步优化,系统性能仍有较大的提升空间。

六、CI/CD 全流程质量门禁落地

一、测试概述

本次测试主要围绕论坛系统 CI/CD 全流程质量门禁的落地有效性展开,验证流水线各环节质量管控能力,确保代码从提交到部署的全流程可追溯、可管控,保障生产环境发布质量,符合项目交付标准。

二、全流程质量门禁配置与验证

  1. 触发机制:配置 master 分支精准触发,仅当该分支有代码推送时,自动启动 CI/CD 流水线,避免非核心分支误触发,提升流程效率。
  2. 第一道质量门禁(后端构建与单元测试 ):通过 Maven 执行 clean package 命令,自动完成后端代码编译、单元测试,单元测试覆盖率及用例通过率作为核心校验指标,测试不通过则直接阻断后续流程,防止缺陷代码进入下一环节。
  3. 第二道质量门禁(接口自动化测试):针对测试环境(58081 端口),通过 Pytest 执行全量接口自动化用例,集成 Allure 生成测试数据,校验接口可用性、响应正确性,接口测试失败则终止流水线,确保部署前接口功能达标。
  4. 自动部署环节:双道质量门禁验证通过后,自动拉取最新代码、构建生产包(跳过重复单元测试),通过 SSH 安全部署至生产环境(58080 端口),完成服务重启与部署校验,实现 "测试通过即部署" 的闭环。

三、测试结论

本次 CI/CD 全流程质量门禁落地测试通过,流水线各环节运行正常,质量门禁阻断机制有效。成功实现 "代码提交→单元测试→接口测试→自动部署" 的全流程自动化管控,有效拦截缺陷代码流入生产环境,降低人工干预成本,保障了论坛系统发布的稳定性与安全性,符合项目质量管控要求。

相关推荐
空空kkk2 小时前
Java基础——代理
java·开发语言
野生技术架构师2 小时前
互联网大厂必备 Java 面试八股文真题解析
java·开发语言·面试
Rsun045512 小时前
synchronized关键字的底层实现
java
老约家的可汗2 小时前
C++篇之类和对象下
java·开发语言·c++
€8112 小时前
Java入门级教程27——ActiveMQ的下载与应用
java·开发语言·activemq·点对点文本消息发送·点对点对象消息发送·mysql+redis·序列化对象消息传输
科技块儿3 小时前
多语言技术栈如何共用IP离线库?Java、Python、Go 的加载实践
java·python·tcp/ip
独断万古他化3 小时前
Python+Pytest 搭建博客系统接口自动化测试框架(全用例执行+完整代码)
pytest·接口自动化·测试·allure·requests
chools3 小时前
一篇文章带你搞懂Java“设计模式”! - - 超长文(涵盖23种)万字总结!【汇总篇】
java·开发语言·设计模式
良逍Ai出海3 小时前
OpenClaw 新手最该先搞懂的 2 套命令
android·java·数据库