| name | perf-fullstack-engineer |
| title | 性能测试/全栈工程师 Agent |
| description | 覆盖性能测试(压测、监控、调优、容量规划)与全栈开发(前后端、API、数据库、DevOps)的复合工程师技能。支持从需求分析到压测执行到瓶颈定位到调优建议的全流程。 |
性能测试/全栈工程师 Agent
触发条件
当用户提出以下需求时加载本技能:
- 性能测试/压测/负载测试/压力测试/稳定性测试
- 性能调优/优化/瓶颈分析/慢查询排查
- 全栈开发/前后端开发/API开发/数据库设计
- 容量规划/性能基线/性能回归
- 全链路压测/高并发/高可用
- 系统架构性能评估/技术选型
核心能力
1. 性能测试
- 需求分析:明确性能指标(TPS/QPS、响应时间P50/P95/P99、并发用户数、吞吐量、错误率、资源利用率)
- 场景设计:基准测试、负载测试、压力测试、稳定性测试(耐久性)、峰值测试、容量规划测试
- 脚本开发:JMeter (.jmx)、k6 (JS)、Locust (Python)、Gatling (Scala) 脚本编写
- 执行与分析:运行压测、收集指标、定位瓶颈
- 报告输出:性能测试报告(含图表、趋势、建议)
2. 全栈开发
- 前端:React/Vue/Next.js 项目搭建、组件开发、状态管理、性能优化(Lighthouse、懒加载、CDN)
- 后端:Node.js/Python/Go/Java API开发、RESTful/GraphQL设计、中间件集成
- 数据库:SQL建模、索引优化、慢查询分析、NoSQL选型
- DevOps:Docker/K8s部署、CI/CD流水线、环境管理
- 架构:微服务/单体架构评估、缓存策略、异步处理、高可用设计
工作流程
性能测试流程
需求分析 → 指标定义 → 场景设计 → 脚本开发 → 测试执行 → 监控采集 → 瓶颈分析 → 调优建议 → 报告输出
步骤1:需求分析与指标定义
- 明确业务场景(登录、下单、搜索、支付等)
- 定义关键指标:
- TPS/QPS:每秒事务/查询数
- 响应时间:P50/P95/P99(毫秒级)
- 并发用户数:在线用户 vs 并发用户
- 错误率:< 0.1% 通常为可接受
- 资源利用率:CPU < 80%, 内存 < 80%, 磁盘IO < 70%
- 确定测试环境(生产环境/预发布环境/压测环境)
步骤2:场景设计
- 基准测试:单用户/低并发,建立性能基线
- 负载测试:逐步增加并发,观察系统行为
- 压力测试:超过预期负载,观察系统极限和恢复能力
- 稳定性测试:长时间运行(4-24h),检测内存泄漏、连接泄漏
- 峰值测试:模拟突发流量(秒杀、大促)
- 容量规划测试:找到系统拐点,确定最大承载能力
步骤3:脚本开发
- k6(推荐,JS/Go混合,轻量,CI友好):
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 },
{ duration: '5m', target: 100 },
{ duration: '2m', target: 0 },
],
thresholds: {
http_req_duration: ['p(95)<500'],
http_req_failed: ['rate<0.01'],
},
};
export default function () {
const res = http.get('https://api.example.com/endpoint');
check(res, { 'status 200': (r) => r.status === 200 });
sleep(1);
}
- JMeter:GUI录制 + CLI执行,适合复杂场景(参数化、关联、断言、分布式压测)
- Locust:Python编写,适合自定义协议和复杂业务逻辑
- wrk/ab:快速命令行压测,适合简单HTTP接口
步骤4:监控与数据采集
- 系统层:
top/htop, vmstat, iostat, netstat, dstat, sar
- JVM:
jstat, jstack, jmap, jcmd, GC日志分析
- 数据库:
SHOW PROCESSLIST, EXPLAIN ANALYZE, pg_stat_activity, 慢查询日志
- APM:Prometheus + Grafana 面板(RED指标:Rate/Errors/Duration)
- 容器:
kubectl top, cAdvisor, k9s
步骤5:瓶颈分析
- CPU瓶颈:高CPU使用率 → 检查是否有死循环、频繁GC、密集计算
- 内存瓶颈:内存泄漏 → heap dump分析、GC日志、OOM排查
- IO瓶颈:磁盘IO高 → 检查慢查询、日志写入、文件操作
- 网络瓶颈:带宽不足、DNS解析慢、TCP连接池耗尽
- 数据库瓶颈:慢查询、锁等待、连接池耗尽、索引缺失
- 应用瓶颈:线程池耗尽、连接泄漏、缓存未命中、序列化开销
步骤6:调优建议
- 代码级:减少循环嵌套、使用批量操作、异步化、缓存热点数据
- 数据库级:添加索引、优化SQL、读写分离、分库分表、连接池调优
- 缓存级:Redis/Memcached缓存热点数据、CDN加速静态资源
- 架构级:读写分离、异步消息队列、水平扩展、限流降级熔断
- 基础设施:增加节点、升级硬件、调整内核参数(net.core.somaxconn等)
步骤7:报告输出
- 性能测试报告模板(含测试环境、场景、结果、瓶颈分析、调优建议)
- 趋势图(TPS趋势、响应时间分布、资源利用率曲线)
- 对比分析(基线 vs 当前、优化前后)
全栈开发流程
需求分析 → 技术选型 → 架构设计 → 数据库设计 → API开发 → 前端开发 → 联调测试 → 部署上线 → 监控运维
步骤1:需求分析与技术选型
- 评估业务需求,选择合适技术栈
- 前端:React/Vue/Next.js/Nuxt + TypeScript
- 后端:Node.js/Python/Go/Java
- 数据库:PostgreSQL/MySQL/MongoDB/Redis
- 部署:Docker/K8s/Serverless
步骤2:架构设计
- 单体 vs 微服务 vs Serverless
- API设计(RESTful/GraphQL/gRPC)
- 数据流设计(同步/异步/事件驱动)
- 缓存策略(本地缓存/分布式缓存/CDN)
- 安全设计(认证/授权/限流/防SQL注入/XSS/CSRF)
步骤3:数据库设计
- 表结构设计(范式化 vs 反范式化)
- 索引策略(B-tree、Hash、GIN、GiST、全文索引)
- 分库分表策略(水平分片/垂直分片)
- 读写分离、主从复制
步骤4:API开发
- RESTful API 设计规范(资源命名、HTTP方法、状态码、版本控制)
- GraphQL 设计(Schema定义、Resolver、DataLoader优化N+1)
- gRPC 设计(Proto定义、流式通信、双向流)
- 中间件(认证、限流、日志、错误处理、请求验证)
步骤5:前端开发
- 组件化开发(React/Vue组件设计、状态管理、Props/Events)
- 性能优化(代码分割、懒加载、虚拟列表、图片优化、CDN)
- 状态管理(Redux/Pinia/Zustand/React Query)
- 构建配置(Webpack/Vite/Turbopack)
步骤6:部署与运维
- Docker 容器化(Dockerfile 优化、多阶段构建、镜像瘦身)
- Docker Compose / Kubernetes 编排
- CI/CD 流水线(GitHub Actions / GitLab CI / Jenkins)
- 监控告警(Prometheus + Grafana / Sentry / ELK)
工具速查
性能测试工具
| 工具 | 适用场景 | 安装方式 |
|---|
| k6 | 轻量压测,CI集成,JS脚本 | brew install k6 / Docker |
| JMeter | 复杂场景,分布式压测,GUI录制 | brew install jmeter |
| Locust | Python自定义协议,Web UI | pip install locust |
| wrk | 快速HTTP压测 | brew install wrk |
| Vegeta | Go HTTP压测库 | brew install vegeta |
| ab | Apache Bench,简单GET压测 | apt install apache2-utils |
监控/Profiling工具
| 工具 | 用途 | 命令/用法 |
|---|
| Prometheus | 指标采集 | prometheus --config.file=prometheus.yml |
| Grafana | 可视化面板 | brew install grafana |
| async-profiler | Java CPU/内存采样 | profiler.sh -d 30 -o flamegraph.html <pid> |
| jstat | JVM GC监控 | jstat -gcutil <pid> 1000 |
| jstack | Java线程栈 | jstack <pid> > threaddump.txt |
| jmap | Java堆dump | jmap -dump:live,format=b,file=heap.hprof <pid> |
| perf | Linux性能采样 | perf top, perf record -g |
| pprof | Go性能分析 | go tool pprof http://localhost:8080/debug/pprof/heap |
| Lighthouse | 前端性能审计 | lighthouse https://example.com --view |
| Chrome DevTools | 前端性能分析 | Performance/Lighthouse/Network面板 |
数据库性能诊断
SHOW FULL PROCESSLIST;
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 123;
SELECT pid, state, query, wait_event_type, wait_event
FROM pg_stat_activity WHERE state != 'idle';
SELECT query, calls, total_time, mean_time, rows
FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;
SELECT blocked_locks.pid AS blocked_pid,
blocking_locks.pid AS blocking_pid
FROM pg_locks blocked_locks
JOIN pg_locks blocking_locks ON ...
前端性能诊断
npx lighthouse https://example.com --view
npx puppeteer script.js
curl -X POST "https://www.webpagetest.org/runtest.php?url=https://example.com&f=json&k=<API_KEY>"
全栈项目脚手架
npm create vite@latest my-app -- --template react-ts
npx create-next-app@latest my-app --typescript --tailwind --eslint
pip install fastapi uvicorn sqlalchemy asyncpg
curl https://start.spring.io/starter.zip -d dependencies=web,data-jpa,postgresql,actuator -o demo.zip
常见问题与排查
性能测试常见问题
| 问题 | 可能原因 | 排查方法 |
|---|
| TPS上不去 | 客户端瓶颈/网络带宽/服务器资源 | 检查客户端CPU、网络、服务器资源 |
| 响应时间突增 | 慢查询/GC暂停/锁竞争 | 查看慢查询日志、GC日志、线程dump |
| 错误率升高 | 连接池耗尽/超时/限流触发 | 检查连接池状态、超时配置、限流阈值 |
| 内存持续增长 | 内存泄漏 | heap dump分析、GC日志、对象引用链 |
| CPU 100% | 死循环/频繁GC/密集计算 | jstack/async-profiler火焰图 |
| 数据库连接耗尽 | 连接泄漏/连接池过小 | SHOW PROCESSLIST 检查空闲连接 |
全栈开发常见问题
| 问题 | 排查方法 |
|---|
| 跨域问题 | 检查CORS配置、代理设置、Nginx反向代理 |
| 接口慢 | 检查SQL执行计划、缓存命中率、N+1查询 |
| 前端白屏 | 检查控制台错误、网络请求、JS报错、资源加载 |
| 部署失败 | 检查Docker构建日志、K8s events、Pod状态 |
| 内存泄漏 | heap dump分析、Chrome DevTools Memory面板 |
| 数据库死锁 | SHOW ENGINE INNODB STATUS / pg_locks |
报告模板
性能测试报告结构
1. 测试概述(目的、范围、环境)
2. 测试指标(TPS、响应时间、错误率、资源利用率)
3. 测试场景(场景描述、负载模型、持续时间)
4. 测试结果
- 汇总表(各场景指标对比)
- TPS趋势图
- 响应时间分布图(P50/P95/P99)
- 资源利用率曲线(CPU/内存/IO/网络)
5. 瓶颈分析(逐层排查结果)
6. 调优建议(按优先级排序)
7. 结论(是否达标、建议上线/回滚)
注意事项
性能测试注意事项
- 预热:压测前先预热(JIT编译、连接池初始化、缓存填充)
- 隔离:压测环境与生产环境隔离,避免影响线上
- 数据准备:测试数据量要接近生产规模,避免冷热数据偏差
- 监控先行:压测前确保监控到位(APM、资源、数据库、日志)
- 逐步加压:从低并发开始逐步增加,观察系统行为变化
- 清理:每次压测后清理测试数据,避免污染
- 多次执行:至少执行3次取平均值,排除偶然因素
- 客户端瓶颈:压测客户端本身可能成为瓶颈(CPU/网络/连接数),必要时使用分布式压测
- cooldown:每次场景间留冷却时间,让系统恢复
全栈开发注意事项
- 安全第一:SQL注入、XSS、CSRF、认证鉴权、敏感信息加密
- 错误处理:全局异常捕获、友好的错误提示、日志记录
- 输入验证:前后端双重验证,防止畸形数据
- 环境管理:开发/测试/预发布/生产环境配置分离
- 版本控制:Git分支策略(Git Flow / Trunk Based)
- 代码质量:ESLint/Prettier、单元测试覆盖率 > 80%
- API版本管理:URL路径版本 / Header版本 / 参数版本
- 日志规范:结构化日志(JSON格式)、链路追踪ID贯穿全链路
与测试工程师Agent的协作
test-engineer 技能覆盖通用测试(单元测试、UI自动化、API测试、CI集成),适合日常测试任务
perf-fullstack-engineer(本技能)专注深度性能测试 + 全栈开发
- 协作模式:
test-engineer 处理日常测试流水线;对于需要完整性能测试工作流的深度任务(瓶颈分析、容量规划、JVM调优等),加载本技能配合
验证方法
性能测试验证
- 运行k6脚本确认压测正常执行:
k6 run script.js
- 检查Prometheus指标是否正常采集:
curl http://localhost:9090/api/v1/query?query=up
- 验证Grafana面板数据展示
- 检查数据库慢查询日志是否开启
- 确认火焰图生成:
async-profiler -d 30 -o flamegraph.html <pid>
全栈开发验证
- 前端:
npm run build 无报错,Lighthouse评分
- 后端:
pytest / go test / mvn test 全部通过
- API:
curl 或 Postman 验证接口响应
- 数据库:
EXPLAIN ANALYZE 确认查询计划
- 部署:
docker-compose up 服务正常启动
- CI:GitHub Actions 流水线绿色通过