troubleshooting
Scannednpx machina-cli add skill chaterm/terminal-skills/troubleshooting --openclaw性能问题排查
概述
性能瓶颈定位、资源争用分析技能。
快速诊断
USE 方法
# Utilization, Saturation, Errors
# CPU
# 利用率
mpstat -P ALL 1
# 饱和度
vmstat 1 | awk '{print $1}' # 运行队列
# 错误
dmesg | grep -i "cpu"
# 内存
# 利用率
free -m
# 饱和度
vmstat 1 | awk '{print $7,$8}' # si/so
# 错误
dmesg | grep -i "oom"
# 磁盘
# 利用率
iostat -x 1 | awk '{print $NF}' # %util
# 饱和度
iostat -x 1 | awk '{print $10}' # avgqu-sz
# 错误
dmesg | grep -i "error"
# 网络
# 利用率
sar -n DEV 1
# 饱和度
netstat -s | grep -i "overflow"
# 错误
ip -s link
60 秒诊断
# 1. 系统负载
uptime
# 2. 内核消息
dmesg | tail
# 3. 系统统计
vmstat 1 5
# 4. CPU 统计
mpstat -P ALL 1 5
# 5. 进程 CPU
pidstat 1 5
# 6. 磁盘 IO
iostat -xz 1 5
# 7. 内存使用
free -m
# 8. 网络统计
sar -n DEV 1 5
# 9. TCP 统计
sar -n TCP,ETCP 1 5
# 10. 进程列表
top -bn1 | head -20
CPU 问题排查
高 CPU 使用
# 找出高 CPU 进程
top -c
ps aux --sort=-%cpu | head
# 查看进程线程
top -H -p PID
ps -T -p PID
# CPU 分析
perf top -p PID
perf record -g -p PID -- sleep 30
perf report
CPU 等待
# 查看 iowait
vmstat 1
iostat -x 1
# 找出 IO 进程
iotop
pidstat -d 1
上下文切换
# 系统级
vmstat 1 | awk '{print $12,$13}'
# 进程级
pidstat -w 1
pidstat -wt -p PID 1
内存问题排查
内存不足
# 查看内存使用
free -m
cat /proc/meminfo
# 查看进程内存
ps aux --sort=-%mem | head
smem -rs pss
# 查看缓存
slabtop
cat /proc/slabinfo
内存泄漏
# 监控进程内存
while true; do
ps -o pid,vsz,rss,comm -p PID
sleep 60
done
# 使用 valgrind
valgrind --leak-check=full ./program
OOM 分析
# 查看 OOM 日志
dmesg | grep -i "oom"
journalctl -k | grep -i "oom"
# 查看 OOM 分数
cat /proc/PID/oom_score
cat /proc/PID/oom_score_adj
磁盘 IO 问题
IO 瓶颈
# 查看 IO 统计
iostat -x 1
# 关键指标
# %util > 80%: 设备繁忙
# await > 10ms: 延迟高
# avgqu-sz > 1: 队列积压
# 找出 IO 进程
iotop -o
pidstat -d 1
磁盘空间
# 查看空间
df -h
df -i # inode
# 找大文件
du -sh /* | sort -rh | head
find / -type f -size +100M
# 找已删除但占用空间的文件
lsof | grep deleted
网络问题排查
连接问题
# 查看连接状态
ss -s
netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c
# TIME_WAIT 过多
ss -tan state time-wait | wc -l
# 连接队列溢出
netstat -s | grep -i "overflow"
ss -ltn
带宽问题
# 查看流量
iftop
nethogs
sar -n DEV 1
# 查看连接带宽
ss -ti
延迟问题
# 网络延迟
ping target
mtr target
# TCP 延迟
ss -ti | grep rtt
常见场景
场景 1:系统变慢排查
#!/bin/bash
echo "=== 系统负载 ==="
uptime
echo "=== CPU 使用 ==="
mpstat 1 3
echo "=== 内存使用 ==="
free -m
echo "=== 磁盘 IO ==="
iostat -x 1 3
echo "=== 高 CPU 进程 ==="
ps aux --sort=-%cpu | head -5
echo "=== 高内存进程 ==="
ps aux --sort=-%mem | head -5
场景 2:应用响应慢
#!/bin/bash
PID=$1
echo "=== 进程状态 ==="
ps -p $PID -o pid,stat,pcpu,pmem,cmd
echo "=== 线程状态 ==="
ps -T -p $PID
echo "=== 打开文件 ==="
lsof -p $PID | wc -l
echo "=== 网络连接 ==="
ss -tnp | grep $PID | wc -l
echo "=== 系统调用 ==="
strace -c -p $PID -o /tmp/strace.out &
sleep 10
kill %1
cat /tmp/strace.out
排查清单
| 症状 | 检查项 |
|---|---|
| 系统慢 | load、CPU、内存、IO |
| 响应慢 | 网络、磁盘、锁 |
| 内存高 | 泄漏、缓存、交换 |
| IO 高 | 进程、队列、设备 |
常用工具
# 综合工具
htop, atop, glances, nmon
# CPU
top, mpstat, perf, pidstat
# 内存
free, vmstat, smem, pmap
# 磁盘
iostat, iotop, blktrace
# 网络
ss, netstat, iftop, tcpdump
Source
git clone https://github.com/chaterm/terminal-skills/blob/main/performance/troubleshooting/SKILL.mdView on GitHub Overview
该技能专注于性能问题排查,结合系统层面的USE(Utilization、Saturation、Errors)三维诊断与60秒快诊,帮助你在系统慢、应用慢、资源紧张等场景快速指向问题域并给出可执行的下一步。你会得到清晰的排查路径、必要的命令集,以及针对CPU、内存、磁盘、网络的分项分析。
How This Skill Works
你通过执行 USE 方法的指标采集来建立当前的系统画像,随后进入分层诊断:CPU、内存、磁盘和网络各自的重点指标与常见瓶颈。基于命令输出的对比与阈值判断,系统化地给出下一步行动建议与需要进一步深入的工具与场景。此流程以可重复的诊断路径为核心,便于在同一场景下复用。
When to Use It
- 系统或应用突然变慢、吞吐下降时需要快速定位方向
- 应用响应慢但 CPU 使用率未显著飙升时需要排查等待/IO瓶颈
- 磁盘 I/O 高、队列积压或吞吐下降时需要定位到底层设备与进程
- 内存紧张、OOM 事件频发或缓存/交换行为异常时排查原因
- 分布式或多节点场景下,需要对单节点进行对比和定位
- 上下文切换/锁争用导致的性能下降需要证据链与诊断路径
Quick Start
- 步骤 1:执行 USE 方法初步诊断,收集关键指标,例如 CPU、内存、磁盘、网络的利用、饱和与错误信息。 ```bash # CPU 指标与错误 mpstat -P ALL 1 vmstat 1 | awk '{print $1}' dmesg | grep -i cpu # 内存指标与错误 free -m vmstat 1 | awk '{print $7,$8}' dmesg | grep -i 'oom' # 磁盘指标与错误 iostat -x 1 | awk '{print $NF}' iostat -x 1 | awk '{print $10}' dmesg | grep -i 'error' # 网络指标与错误 sar -n DEV 1 netstat -s | grep -i 'overflow' ip -s link ```
- 步骤 2:开展60秒诊断,获取系统快照,以时间窗内的对比数据为支撑。 ```bash uptime dmesg | tail vmstat 1 5 mpstat -P ALL 1 5 pidstat 1 5 iostat -xz 1 5 free -m sar -n DEV 1 5 sar -n TCP,ETCP 1 5 top -bn1 | head -20 ```
- 步骤 3:按结果定位方向,进入对应分项排查(CPU、内存、磁盘、网络),执行目标命令与分析要点。
- 步骤 4:汇总发现,记录可复现的指标与下一步行动,必要时启动更深层次的分析(如 perf、valgrind、strace、lsof 等)以确认根因。
Best Practices
- 避免在生产环境中无差别执行高成本诊断,优先在受控时间窗口执行并在可观测数据中验证结果
- 对同一场景应用统一的时间窗和采样频率,确保横向对比的一致性
- 在每次诊断后保存输出、关键指标与结论,便于回放、审计与知识沉淀
- 对 CPU、内存、磁盘、网络每一项都使用同一标准的阈值与判定逻辑,以避免误判
- 在需要深入分析时,优先从轻量级到重量级的工具序列(如 pidstat -> perf -> strace)推进,尽量降低对生产的影响
Example Use Cases
- 场景:应用接口响应慢,但单机 CPU 使用率并不高。你通过 USE 指标发现磁盘 IO 的等待显著上升(await 高、%util 处于高值),进一步用 iostat、iotop 和 pidstat 定位到数据库慢查询引发的 IO 等待。
- 场景:某服务偶发性崩溃,OOM 日志频繁出现。你使用 dmesg 与 journalctl 结合 /proc/meminfo、ps 与 smem 进行内存分配与压力源定位,最终通过应用层缓存策略调整解决。
- 场景:高并发下系统上下文切换过多,导致吞吐下降。你用 vmstat、pidstat 的上下文切换统计与 top 的活动线程对比,定位到锁争用点,结合 perf 进行热点函数分析。
- 场景:网络请求延迟波动明显。你在多节点上用 tcptrace/mtr 与 sar- n DEV 对比,找到跨链路抖动与某些中间代理的队列积压,进而优化路由和中间件配置。
Frequently Asked Questions
Related Skills
network-tools
chaterm/terminal-skills
Linux network tools and diagnostics
sql-optimization
chaterm/terminal-skills
SQL 优化与调优
benchmarking
chaterm/terminal-skills
性能基准测试
profiling
chaterm/terminal-skills
--- name: profiling description: 性能分析 version: 1.0.0 author: terminal-skills tags: [performance, profiling, perf, flamegraph, strace, cpu] --- # 性能分析 ## 概述 CPU/内存分析、火焰图、追踪技能。 ## perf 工具 ### 基础命令 ```bash # 安装 apt install linux-tools-common linux-tools-$(uname -r) # CPU 采样 perf record -g -p PID p
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