1. Linux调试命令全景概览
在Linux系统运维和开发过程中,调试命令就像外科医生的手术刀,是定位和解决问题的关键工具。我整理了15年运维工作中最高频使用的20个调试命令,这些工具覆盖了系统性能分析、进程调试、网络排查等核心场景。不同于教科书式的命令罗列,本文将结合真实故障排查案例,详解每个命令的实战技巧和隐藏参数。
2. 系统级调试命令精要
2.1 性能监控三剑客
top命令的进阶用法:
bash复制top -H -p [PID] -d 2 -c
-H显示线程视图-d设置刷新间隔-c显示完整命令- 交互模式下按
1查看CPU核心负载分布
vmstat实战分析:
bash复制vmstat 1 5
输出字段解读:
r:运行队列长度(>CPU核数说明饱和)si/so:交换分区使用情况(持续>0需警惕)us/sy:用户/系统CPU时间占比(理想比例7:3)
iostat磁盘瓶颈定位:
bash复制iostat -x 1
关键指标:
%util:设备利用率(>80%为瓶颈)await:IO响应时间(>10ms需优化)
经验:当%util高但await低时,可能是RAID卡缓存导致的假象,需结合
smartctl检查磁盘健康状态
2.2 内存分析利器
free命令的真相:
bash复制free -h --si
-h人性化显示--si按1000进制换算- 重点看
available而非free,前者包含可回收缓存
pmap内存分布分析:
bash复制pmap -x [PID]
输出解析:
- 查找
[anon]段识别内存泄漏 - 对比多次采样观察增长趋势
3. 进程级调试技巧
3.1 strace系统调用追踪
经典故障排查流程:
bash复制strace -ff -tt -T -o trace.log [command]
参数解析:
-ff跟踪子进程-tt添加时间戳-T显示调用耗时- 常见错误模式:
ENOENT:文件不存在EACCES:权限不足ETIMEDOUT:连接超时
3.2 ltrace库函数追踪
动态链接库分析:
bash复制ltrace -c -S [program]
-c统计调用次数-S同时显示系统调用- 典型应用:
- 验证配置文件加载路径
- 检查加密函数调用情况
4. 网络调试大全
4.1 tcpdump高级过滤
精准抓包技巧:
bash复制tcpdump -i eth0 -nn -vvv 'tcp port 80 and (tcp[13] & 2!=0)'
tcp[13]解析TCP标志位- 常用过滤条件:
- 重传包:
tcp[13] & 0x04 - SYN洪水:
'tcp[tcpflags] == tcp-syn' - HTTP请求:
'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'(匹配GET)
- 重传包:
4.2 netstat/ss对比
连接状态分析:
bash复制ss -tulnp | grep ESTAB
新老工具对比:
| 功能 | netstat | ss |
|---|---|---|
| 显示速度 | 慢 | 极快 |
| 内核数据 | 读取/proc | 直接获取 |
| 过滤语法 | 简单 | 强大 |
| 协议支持 | 基础 | 丰富 |
5. 调试辅助工具集
5.1 lsof多维度分析
典型应用场景:
bash复制lsof -i :8080 # 查看端口占用
lsof +D /var/log # 目录文件打开情况
lsof -p [PID] # 进程文件操作
lsof -u username # 用户级分析
5.2 gdb核心调试技巧
生产环境安全调试:
bash复制gdb -p [PID] -ex 'thread apply all bt' -batch
关键操作:
thread apply all bt:获取所有线程堆栈info registers:查看寄存器状态x/20x $sp:检查栈内存
警告:生产环境慎用
attach,可能引发进程挂起。推荐先用gcore保存核心转储再分析
6. 实战问题排查指南
6.1 CPU飙高排查流程
top定位异常进程pidstat -t -p [PID] 1查看线程级消耗perf top -p [PID]分析热点函数jstack [PID]获取Java线程堆栈(如适用)
6.2 内存泄漏定位方法
pmap -x [PID]观察内存增长valgrind --leak-check=full [program]动态检测gdb dump内存区域离线分析- 对比
/proc/[PID]/smaps前后快照
7. 调试数据可视化
7.1 火焰图生成
全链路性能分析:
bash复制perf record -F 99 -g -p [PID] -- sleep 30
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg
解读要点:
- 宽度代表资源占用
- 纵向表示调用栈深度
- 平顶表示性能瓶颈
7.2 sar历史数据分析
构建基线参考:
bash复制sar -A -f /var/log/sa/sa$(date +%d -d yesterday)
关键指标组合:
-q:负载队列-r:内存使用-b:IO吞吐-n DEV:网络流量
8. 调试环境优化建议
-
内核参数调整:
bash复制echo 'kernel.core_pattern=/tmp/core-%e-%p' >> /etc/sysctl.conf sysctl -p -
调试符号安装:
bash复制
debuginfo-install glibc -
历史命令增强:
bash复制export HISTTIMEFORMAT="%F %T "
9. 命令组合实战案例
磁盘IO异常排查:
bash复制watch -n 1 'iostat -x 1 2 | tail -n +7; pidstat -d 1'
网络连接风暴分析:
bash复制ss -s; netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n
10. 调试安全规范
- 生产环境避免直接
kill -9,先尝试SIGTERM - 调试前创建
screen/tmux会话防中断 - 敏感操作使用
--dry-run参数预演 - 关键配置文件修改前执行
cp -p保留属性