profiling
Scannednpx machina-cli add skill chaterm/terminal-skills/profiling --openclaw性能分析
概述
CPU/内存分析、火焰图、追踪技能。
perf 工具
基础命令
# 安装
apt install linux-tools-common linux-tools-$(uname -r)
# CPU 采样
perf record -g -p PID
perf record -g -a -- sleep 30
# 查看报告
perf report
perf report --stdio
# 实时统计
perf top
perf top -p PID
# 统计事件
perf stat command
perf stat -p PID sleep 10
常用事件
# CPU 周期
perf record -e cycles -p PID
# 缓存未命中
perf record -e cache-misses -p PID
# 上下文切换
perf record -e context-switches -p PID
# 列出可用事件
perf list
火焰图
# 采集数据
perf record -F 99 -g -p PID -- sleep 30
# 生成火焰图
perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg
# 或使用 FlameGraph 工具
git clone https://github.com/brendangregg/FlameGraph
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > out.svg
strace 追踪
基础用法
# 追踪进程
strace -p PID
# 追踪命令
strace command
# 统计系统调用
strace -c command
strace -c -p PID
# 追踪特定调用
strace -e open,read,write command
strace -e trace=network command
strace -e trace=file command
高级选项
# 显示时间戳
strace -t command
strace -tt command # 微秒
# 显示耗时
strace -T command
# 跟踪子进程
strace -f command
# 输出到文件
strace -o trace.log command
ltrace 库调用
# 追踪库调用
ltrace command
ltrace -p PID
# 统计
ltrace -c command
# 特定库
ltrace -l libc.so.6 command
内存分析
valgrind
# 内存泄漏检测
valgrind --leak-check=full ./program
# 内存错误
valgrind --tool=memcheck ./program
# 缓存分析
valgrind --tool=cachegrind ./program
# 调用图
valgrind --tool=callgrind ./program
kcachegrind callgrind.out.*
pmap
# 查看进程内存映射
pmap PID
pmap -x PID
# 详细信息
pmap -XX PID
smem
# 内存使用统计
smem
smem -u # 按用户
smem -p # 按进程
smem -k # 人类可读
系统分析
vmstat
# 每秒刷新
vmstat 1
# 输出说明
# r: 运行队列
# b: 阻塞进程
# si/so: 交换
# bi/bo: 块 IO
# us/sy/id/wa: CPU 使用
iostat
# 磁盘统计
iostat -x 1
# 输出说明
# %util: 设备利用率
# await: 平均等待时间
# r/s, w/s: 读写 IOPS
pidstat
# CPU 使用
pidstat -u 1
# 内存使用
pidstat -r 1
# IO 使用
pidstat -d 1
# 特定进程
pidstat -p PID 1
常见场景
场景 1:CPU 热点分析
#!/bin/bash
PID=$1
# 采集 30 秒
perf record -F 99 -g -p $PID -- sleep 30
# 生成报告
perf report --stdio > cpu_report.txt
# 生成火焰图
perf script | stackcollapse-perf.pl | flamegraph.pl > cpu_flame.svg
场景 2:IO 延迟分析
#!/bin/bash
# 使用 biolatency (bcc-tools)
biolatency 10 1
# 或使用 iostat
iostat -x 1 10
场景 3:系统调用分析
#!/bin/bash
PID=$1
# 统计系统调用
strace -c -p $PID -o syscall_stat.txt &
sleep 60
kill %1
cat syscall_stat.txt
工具对比
| 工具 | 用途 | 开销 |
|---|---|---|
| perf | CPU 分析 | 低 |
| strace | 系统调用 | 高 |
| valgrind | 内存分析 | 很高 |
| pidstat | 进程统计 | 低 |
故障排查
# perf 权限问题
echo 0 > /proc/sys/kernel/perf_event_paranoid
# 符号缺失
apt install linux-tools-$(uname -r)-dbgsym
# strace 附加失败
echo 0 > /proc/sys/kernel/yama/ptrace_scope
Source
git clone https://github.com/chaterm/terminal-skills/blob/main/performance/profiling/SKILL.mdView on GitHub Overview
profiling 技能提供完整的性能分析能力,覆盖 CPU/内存分析、火焰图、调用跟踪等。你可以在开发、测试和生产环境中使用它来发现热点、内存问题与 IO 瓶颈,并生成可分享的报告与可视化图。该技能整合多种工具,构建一个从采样到可视化的可重复工作流。
How This Skill Works
该技能通过对目标进程进行采样与追踪,收集事件数据(CPU 周期、缓存命中、上下文切换、系统调用等),并将数据汇总为可分析的报告。它整合多种工具:perf 提供 CPU/事件采样,strace 和 ltrace 记录系统调用与库调用,Valgrind 提供内存与缓存分析,pmap/smem/vmstat/iostat/pidstat 跟踪内存、进程与 IO 状态。你可以将 perf script + flamegraph 脚本生成火焰图,以直观呈现热区和调用栈的时间分布。
When to Use It
- 定位高 CPU 占用的热点函数或调用栈
- 分析进程的内存使用模式,找出泄漏或异常增长
- 分析 IO/磁盘等待导致的请求变慢
- 在可控环境中对生产负载进行低开销采样以建立基线
- 需要向团队沟通性能问题并以火焰图、报告等形式呈现
Quick Start
- 1) 安装并准备工具: apt install linux-tools-common linux-tools-$(uname -r) 以及必要的测试工具(如 flamegraph、strace、valgrind 等)。
- 2) 获取目标进程的 PID(或对整个系统进行采样)。
- 3) 进行 CPU 采样并查看报告: perf record -g -p PID; perf report; 或 perf record -g -a -- sleep 30; perf report。
- 4) 生成火焰图以直观呈现热点: perf script | stackcollapse-perf.pl | flamegraph.pl > cpu_flame.svg;若使用 FlameGraph 工具,请先 git clone https://github.com/brendangregg/FlameGraph,然后 perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > out.svg;
- 5) 如需系统调用与内存分析,辅以 strace/ltrace 与 valgrind 的相应工具来定位问题。
Best Practices
- 在可控环境里复现问题再进行分析,避免在生产环境中进行大规模 profiling。
- 为分析设置一个基线(baseline),并在相同负载下对比报告差异。
- 优先从火焰图中的热区入手,再深入具体函数及调用路径。
- 为采样选择合适的频率和事件集合(如 perf record -F 99 -g),避免过度采样导致额外开销。
- 将可视化结果(如 flamegraph)作为沟通产出,与文本报告一并使用以便团队理解。
- 在内存分析时,结合 pmap/smem/valgrind 的不同工具,形成 CPU 与内存的联合根因分析。
Example Use Cases
- 场景 1:Node.js API 服务的 CPU 热点定位。通过 perf record -g -p PID -- sleep 30,生成 flamegraph.svg,定位到 hot_function 调用路径,进一步优化代码或外部依赖。
- 场景 2:Python 数据处理作业的内存泄漏诊断。结合 valgrind 的 memcheck 与 callgrind,使用 pmap 查看进程映射,结合 smem 统计内存分布,定位泄漏点。
- 场景 3:磁盘 IO 瓶颈分析。结合 iostat -x 1 和 biolatency,定位磁盘利用率和等待时间,配合 perf 的上下文切换与缓存命中数据进一步诊断。
- 场景 4:容器化应用的 profiling。在容器内运行 perf 采样并确保具备必要权限(CAP_SYS_ADMIN 或以 privileged 模式),对容器内进程进行 perf/top/报告,排查容器边界导致的性能问题。
Frequently Asked Questions
Related Skills
troubleshooting
chaterm/terminal-skills
性能问题排查
sql-optimization
chaterm/terminal-skills
SQL 优化与调优
benchmarking
chaterm/terminal-skills
性能基准测试
tuning
chaterm/terminal-skills
--- name: tuning description: 系统调优 version: 1.0.0 author: terminal-skills tags: [performance, tuning, sysctl, kernel, optimization] --- # 系统调优 ## 概述 内核参数、文件系统、网络优化技能。 ## 内核参数调优 ### 内存管理 ```bash # /etc/sysctl.d/99-memory.conf # 减少交换倾向 vm.swappiness = 10 # 脏页刷新 vm.dirty_ratio = 20 vm.dirty_backg
Database Design Expert
martinholovsky/claude-skills-generator
Expert in database schema design with focus on normalization, indexing strategies, FTS optimization, and performance-oriented architecture for desktop applications
python-performance
athola/claude-night-market
'Consult this skill for Python performance profiling and optimization.