

传统性能测试的工作流程,大部分时间花在"堆"上——堆压测脚本、堆并发场景、堆监控指标,跑完之后,面对一堆 P50/P90/P99 曲线和资源监控图,再靠人工经验去定位瓶颈在哪里。
这个流程最大的瓶颈,往往不在执行压测本身,而在结果分析这一步。一个团队可能花两天时间设计场景、跑完压测,却要花一周时间排查"为什么 P99 在并发 500 之后突然飙升"——翻应用日志、对比监控曲线、回溯最近的代码变更和配置调整、和数据库团队反复确认是否有慢查询,整个排查过程高度依赖排查者的经验积累,新人很难独立完成,老人又经常被多个项目的排查请求占满精力。
更现实的问题是,很多性能问题的根因模式是高度重复的——同样是连接池配置不当导致的瓶颈,可能在不同的服务里反复出现好几次,但每次排查仍然要从零开始,因为上一次的排查经验,通常只存在某个工程师的脑子里,或者一份没人会再翻开的复盘文档里。
AI 在这件事上能帮上忙,但要先说清楚它做的是什么,不是什么。
"AI 预测系统瓶颈"这个说法容易让人产生误解,以为 AI 能像算命一样提前算出系统哪里会出问题,或者凭空预判一个还没上线的系统会在什么地方崩溃。
实际发生的事情更朴素:AI Agent 通过分析压测过程中产生的指标数据(响应时间分布、吞吐量曲线、错误率、资源利用率走势),结合结构化注入的历史瓶颈模式知识,识别出当前数据中和历史已知问题模式相似的特征,从而提前定位可能的瓶颈位置,并给出基于已验证经验的调优方向建议。
这不是凭空预测,是模式匹配 + 经验复用。它的能力上限,完全取决于注入的知识库——这一点和测试领域 Skill 体系的逻辑完全一致:Agent 能给出多准的判断,取决于团队把多少真实的性能问题根因,显式化、结构化地写进了知识文档,而不是取决于模型本身有多"聪明"。
换句话说,"预测"这个词,准确的含义更接近"基于已知规律的提前归因",而不是"对未知的预言"。这个区分很重要,因为它决定了你应该如何评估和使用这套能力——把它当成经验复用的加速器,而不是当成一个万能的预知系统。
要让 Agent 具备这种"瓶颈识别"能力,核心是写一份覆盖团队真实性能问题历史的 Skill 文档。
元信息层:
---
name: performance-testing
description:
性能测试与瓶颈分析专项 Skill。触发场景:压测、性能瓶颈定位、
响应时间异常、吞吐量下降、资源利用率分析、调优建议。
关键词:压测、性能、瓶颈、慢查询、内存泄漏、连接池、
load test、bottleneck、latency、throughput。
allowed-tools: Bash(*), Python(*)
---正文核心章节,以一个真实的瓶颈模式库为例:
## 历史瓶颈模式库
### 模式一:数据库连接池耗尽
特征:并发量超过某个阈值后,响应时间曲线呈阶跃式上升,
而不是平滑增长;错误日志出现连接超时。
历史案例:订单服务在并发 300 时出现此问题,
根因是连接池最大值设置为 50,远低于并发需求。
调优方向:核查连接池配置上限,结合数据库实例的
最大连接数限制,合理调整应用层连接池大小。
### 模式二:GC 停顿导致的尾延迟突增
特征:平均响应时间正常,但 P99 显著偏高,
且偏高的请求在时间分布上呈现周期性聚集。
历史案例:用户服务在持续压测 20 分钟后,P99 从
200ms 跳升到 2s,周期约为 90 秒一次。
调优方向:检查 GC 日志,核实停顿时间和压测中
P99 异常的时间点是否吻合,排查堆内存配置和对象分配速率。
### 模式三:慢查询拖累整体吞吐
特征:吞吐量在压测初期正常,随着数据量增长逐渐下降,
且 CPU 和内存使用率并不高(说明瓶颈不在计算资源)。
历史案例:商品列表接口在数据量超过 10 万条后,
吞吐量下降 60%,根因是排序字段缺少索引。
调优方向:核查涉及排序、分组、范围查询的 SQL 是否有
对应索引,结合执行计划分析。
## Notes for Agent
- 分析时优先对照"特征"描述,寻找当前指标曲线的形态相似性
- 给出调优建议时,必须说明依据的历史案例,不要凭空建议
- 如果当前模式与所有已知模式都不匹配,明确说明
"未匹配到已知模式",建议人工介入分析,不要强行套用注意最后一条 Notes for Agent——这是诚实性的关键约束。一个负责任的性能测试 Skill,必须明确告诉 Agent:遇到知识库覆盖不到的新模式,要说"不知道",而不是强行给出一个看起来合理但实际没有依据的建议。
有了这套 Skill,一次压测之后的分析流程大致是这样的:
给 Agent 的指令:
基于 performance-testing Skill,分析本次压测的
监控数据(results/metrics.json),识别可能的瓶颈
模式,给出调优建议。Agent 执行路径:读取压测指标数据 → 对照 Skill 中的历史瓶颈模式库,逐一比对特征(响应时间曲线形态、错误类型、资源利用率走势) → 找到形态最相似的模式 → 输出诊断结果和调优方向,并标注依据的历史案例。
一个真实的输出示例:
诊断结果:当前数据与"模式二:GC 停顿导致的尾延迟突增"
高度吻合。
匹配依据:
- P99 在压测第 18 分钟出现跳升,从 210ms 升至 1.8s
- 跳升后约 85 秒回落,随后再次出现,呈现周期性
- 该模式与历史案例(用户服务,周期约 90 秒)的
特征高度一致
建议:
1. 提取本次压测期间的 GC 日志,核实停顿时间点
是否与 P99 异常时间点吻合
2. 检查当前堆内存配置(-Xmx/-Xms)和对象分配速率
3. 不能完全排除其他可能性,建议结合 GC 日志做最终确认这个输出的价值,不是替代人做最终判断,是把"翻日志、做关联、想可能性"这个需要经验积累才能高效完成的环节,压缩到几分钟,把人的精力留给最后的确认和调优实施。
诚实地说,这套机制有清晰的能力边界,不应该被夸大,这也是这篇文章必须明确写出来的部分,而不是只展示它能做的好事。
边界一:只能识别已经被写进知识库的模式。全新的、团队从未遇到过的瓶颈类型,Agent 无法识别——它没有可以匹配的历史案例,这和探索性测试、安全测试中"未知问题"的局限本质上是同一个问题:AI 依赖的是已经被人类总结过的知识,不能凌空创造新的判断。这种情况下,依然需要人工从头排查,而排查出的新模式,应该被记录下来反哺知识库,让 Skill 持续进化,这样下一次类似问题出现时,排查时间才能真正缩短。
边界二:相似不等于确定。指标曲线形态相似,不代表根因一定相同——两个看起来很像的尾延迟突增,可能一个是 GC 停顿,另一个是网络抖动叠加重试机制导致的假性周期性。Agent 给出的是"高度吻合的候选诊断",不是"确定结论"。最终的调优实施,仍然需要人工核实日志、验证假设之后才能执行,尤其是涉及生产环境配置变更的场景,任何基于"看起来很像"就直接动手调优的做法都存在风险。
边界三:知识库的维护成本不会消失。这套体系的价值上限,取决于团队持续把新发现的瓶颈模式写进 Skill。如果团队停止维护这个知识库,Agent 的诊断能力会随着系统演进逐渐失准——比如技术栈升级后,旧的瓶颈模式可能不再适用,新引入的中间件可能带来全新的、知识库里完全没有记录的瓶颈类型。这意味着,这套机制不是一次性建设就能长期高效运转的,它需要持续的投入,本质上和团队测试 Skill 库的治理逻辑完全一致。
"AI 预测系统瓶颈"听起来像是一次魔法跃迁,实际上是一次扎实的工程升级——把团队过去靠口口相传、靠老人脑子记忆的瓶颈排查经验,转化成结构化、可复用、可持续迭代的知识资产。
性能测试不再堆脚本,堆的是经过验证的判断模式。而这些模式,从来不是 AI 凭空产生的,是每一次真实的线上瓶颈、每一次熬夜排查的复盘,沉淀下来的结果。
AI 做的事,是让这些沉淀下来的经验,在下一次类似问题出现时,能够被秒级调用,而不是被遗忘在某次复盘文档里,也不必依赖某个刚好在场、刚好记得这件事的资深工程师。
如果你的团队正在考虑往这个方向投入,起步的方式很简单:把过去一年里最棘手的三次性能问题排查过程,完整地写下来——特征是什么、根因是什么、怎么验证的、最后怎么解决的。这三条记录,就是你性能测试 Skill 的第一版知识库。
不需要等到这套体系完美之后才开始用。先用三个真实案例跑起来,在使用中持续补充新的模式,这本身就是一个会随时间增值的过程。