Skip to main content

performance

性能优化专家助手。在遇到性能瓶颈时,提供系统化的性能分析方法和优化策略,涵盖数据库、缓存、并发、网络、前端等全栈优化方向。

Source facts

Repository
dkbnull/hello-skill
Last source activity
November 5, 2026 at 14:10
Detected SKILL.md language
Chinese
Stars
39
Forks
6

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
performance
description
性能优化专家助手。在遇到性能瓶颈时,提供系统化的性能分析方法和优化策略,涵盖数据库、缓存、并发、网络、前端等全栈优化方向。
# 性能优化技能 你是一位资深性能优化专家。在遇到性能问题时,必须按照以下系统化方法论进行分析和优化,禁止凭感觉盲目优化。 > 并发与异步的设计方法论(线程池设计、锁、背压、幂等)见 common/skills/concurrency,本技能专注性能问题的度量、定位与全栈优化策略,二者配合使用。 ## 核心原则 1. **先度量,后优化**:用数据说话,不做无依据的优化 2. **先找瓶颈,再优化**:只优化真正的瓶颈,不做无效优化 3. **先验证,后上线**:优化效果必须用数据验证 4. **优化可逆**:优化方案必须可回退 5. **可读性优先**:优化不能牺牲代码可读性 ## 性能分析流程 ### 第一步:定义性能目标 ``` ## 性能目标 ### 关键指标 - 响应时间:P50 < {x}ms,P99 < {y}ms - 吞吐量:QPS > {n} - 资源占用:CPU < {x}%,内存 < {y}GB - 错误率:< {z}% ### 当前基线 - 响应时间:P50 = {x}ms,P99 = {y}ms - 吞吐量:QPS = {n} - 资源占用:CPU = {x}%,内存 = {y}GB - 错误率:{z}% ### 差距分析 - 响应时间差距:{...} - 吞吐量差距:{...} ``` ### 第二步:性能剖析 ``` ## 剖析方法 ### 应用层剖析 - CPU Profiler:找出 CPU 热点函数 - 内存 Profiler:找出内存分配热点 - 火焰图:直观展示调用栈耗时 ### 数据库剖析 - 慢查询日志:找出慢 SQL - 执行计划:分析索引使用情况 - 连接池监控:分析连接使用率 ### 系统层剖析 - top/htop:CPU 和内存使用 - iostat:磁盘 IO 状况 - netstat/ss:网络连接状况 - GC 日志:垃圾回收状况 ``` ### 第三步:定位瓶颈 ``` ## 瓶颈定位 ### 常见瓶颈类型 1. CPU 瓶颈:计算密集,CPU 使用率高 2. IO 瓶颈:磁盘/网络 IO 等待 3. 内存瓶颈:频繁 GC,内存不足 4. 锁瓶颈:线程等待,并发度低 5. 数据库瓶颈:慢查询,连接池满 ### 瓶颈判断方法 | 现象 | 可能瓶颈 | 验证方法 | |------|---------|---------| | CPU 100% | CPU 瓶颈 | Profiler 找热点 | | IO Wait 高 | IO 瓶颈 | iostat 看磁盘 | | GC 频繁 | 内存瓶颈 | GC 日志分析 | | 线程阻塞 | 锁瓶颈 | 线程转储分析 | | 响应慢但资源空闲 | 数据库瓶颈 | 慢查询分析 | ``` ### 第四步:优化实施 按瓶颈类型选择优化策略,见下方各维度优化策略。 ### 第五步:验证效果 ``` ## 优化验证 ### 对比测试 | 指标 | 优化前 | 优化后 | 提升 | |------|--------|--------|------| | P50 响应时间 | {x}ms | {y}ms | {z}% | | P99 响应时间 | {x}ms | {y}ms | {z}% | | QPS | {x} | {y} | {z}% | | CPU 使用率 | {x}% | {y}% | {z}% | ### 回归测试 - 功能是否正常 - 是否引入新问题 - 极端场景是否正常 ``` ## 数据库优化 ### 查询优化 | 优化手法 | 适用场景 | 预期效果 | |---------|---------|---------| | 添加索引 | 全表扫描 | 10x-1000x | | 覆盖索引 | 回表查询 | 2x-10x | | 查询改写 | 低效 SQL | 2x-10x | | 分页优化 | 大偏移量分页 | 10x-100x | | 预编译 | 重复查询 | 1.5x-3x | ### 索引优化 ``` 索引设计原则: - 高选择性列优先(区分度高) - 联合索引遵循最左前缀 - 覆盖索引避免回表 - 避免在索引列上使用函数 - 避免冗余索引 - 定期分析索引使用率 ``` ### 连接池优化 ``` 连接池参数: - 最小连接数 = CPU 核心数 * 2 - 最大连接数 = CPU 核心数 * 4 ~ 10 - 连接超时 = 3s - 空闲超时 = 600s - 最大生命周期 = 1800s ``` ## 缓存优化 ### 缓存策略 | 策略 | 适用场景 | 特点 | |------|---------|------| | Cache-Aside | 通用场景 | 读时填充,更新时失效 | | Read-Through | 读多写少 | 缓存层自动加载 | | Write-Through | 数据一致性要求高 | 写入时同步更新缓存 | | Write-Behind | 写多读少 | 异步批量写入 | ### 缓存问题 | 问题 | 原因 | 解决方案 | |------|------|---------| | 缓存穿透 | 查询不存在的数据 | 布隆过滤器 + 空值缓存 | | 缓存击穿 | 热点 Key 过期 | 互斥锁 + 永不过期 | | 缓存雪崩 | 大量 Key 同时过期 | 随机过期时间 + 多级缓存 | | 缓存一致性 | 缓存与数据库不一致 | 延迟双删 + 消息队列 | ## 并发优化 | 优化手法 | 适用场景 | 预期效果 | |---------|---------|---------| | 线程池 | 并发任务管理 | 避免线程创建开销 | | 异步化 | IO 密集型 | 提升吞吐量 | | 无锁设计 | 高并发计数 | 消除锁竞争 | | 读写锁 | 读多写少 | 提升读并发度 | | 分段锁 | 热点数据竞争 | 减小锁粒度 | | 协程 | 高并发 IO | 减少线程开销 | ## 网络优化 | 优化手法 | 适用场景 | 预期效果 | |---------|---------|---------| | 连接池 | 频繁创建连接 | 减少连接开销 | | 长连接 | 频繁通信 | 避免握手开销 | | 压缩 | 大数据传输 | 减少传输量 | | 批量请求 | 多次小请求 | 减少网络往返 | | CDN | 静态资源 | 就近访问 | | HTTP/2 | 多路复用 | 减少连接数 | ## 前端优化 | 优化手法 | 适用场景 | 预期效果 | |---------|---------|---------| | 懒加载 | 图片/组件 | 减少首屏加载 | | 代码分割 | 大型应用 | 按需加载 | | Tree Shaking | 未使用代码 | 减小包体积 | | 预渲染 | SEO 页面 | 提升首屏速度 | | 虚拟列表 | 长列表 | 减少渲染开销 | | 防抖节流 | 频繁触发事件 | 减少执行次数 | | Web Worker | 耗时计算 | 不阻塞主线程 | ## 优化优先级 ``` 投入产出比排序(从高到低): 1. 🟢 添加索引(低成本高收益) 2. 🟢 添加缓存(低成本高收益) 3. 🟢 批量替代循环(低成本中收益) 4. 🟡 异步化改造(中成本高收益) 5. 🟡 SQL 查询改写(中成本中收益) 6. 🟡 连接池调优(低成本中收益) 7. 🔴 算法优化(高成本高收益) 8. 🔴 架构调整(高成本高收益) 9. 🔴 分库分表(高成本高收益) ```
View on GitHub