工具的核心价值是「定位问题 + 解决问题」,不是背参数。运维实战讲究:先宏观后微观、先整体后进程,用最少的命令最快定位根因。下面按日常排障场景分类,附带高频用法、实战经验、踩坑提醒,均为生产环境反复验证的落地经验。
一、系统负载与 CPU 排查:先看整体,再定方向
核心工具链:uptime → top/htop → vmstat
1. uptime:10 秒判断系统压力趋势
uptime# 输出示例:10:23:45 up 30 days, 2 users, load average: 2.35, 1.89, 1.12
实战经验:
三个数值分别对应 1 分钟、5 分钟、15 分钟平均负载。数值持续上升(1 分 > 5 分 > 15 分)说明压力正在上涨;持续下降说明压力在缓解。
负载数值 ≈ 处于「运行中 + 不可中断等待」的进程总数,不等于 CPU 使用率。负载高但 CPU 空闲,大概率是磁盘 IO 阻塞导致。
经验阈值:负载长期超过 CPU 物理核心数的 70% 需要重点关注,超过核心数时业务会出现明显卡顿。
2. top/htop:快速定位异常进程
top# 交互快捷键:P 按CPU排序;M 按内存排序;1 显示单核状态;k 发送信号杀进程
核心指标解读:
us:用户态 CPU 占比,过高通常是业务程序计算密集、逻辑复杂;
sy:内核态 CPU 占比,过高多为系统调用频繁、上下文切换过多;
wa:IO 等待占比,超过 30% 基本可判定存在磁盘 / 网络 IO 瓶颈;
id:空闲 CPU 占比,数值越低系统越紧张。
踩坑提醒:
判断进程内存占用看RES常驻物理内存,不要看VIRT虚拟内存;
进程状态为D(不可中断睡眠)时,几乎都是在等待 IO,此时杀进程无效,优先排查 IO 瓶颈;
生产环境建议直接安装htop,可视化和交互性远优于原生 top。
3. vmstat:快速区分瓶颈类型
vmstat 1 5 # 每秒输出1次,共输出5组
重点看 4 列:
r:运行队列进程数,持续大于 CPU 核心数 → CPU 计算瓶颈;
b:不可中断等待进程数,持续大于 0 → 存在 IO 阻塞;
cs:上下文切换次数,突发飙升 → 程序频繁创建销毁线程 / 进程;
us/sy:配合 top 确认 CPU 消耗的具体类型。
实战技巧:负载告警时先跑 vmstat,10 秒内就能区分是 CPU 密集还是 IO 密集,避免盲目排查。
二、磁盘与 IO 排查:空间满、读写慢标准处理流程
场景 1:磁盘空间告警(df + du + lsof 三板斧)
第一步:df 定位满分区
第二步:du 定位大目录
# 生产最常用:快速定位当前目录下Top大文件夹du -sh * | sort -hr | head -10
高频踩坑:df 与 du 结果不一致
# 查找删除未释放的文件lsof | grep deleted# 找到对应进程后优先优雅重启,释放文件句柄,不要直接强制kill
清理操作注意事项
场景 2:磁盘读写慢、IO 负载高
iostat:看磁盘整体负载
关键指标:
%util:磁盘繁忙度,接近 100% 说明磁盘已达性能瓶颈;
await:单次 IO 平均耗时(排队 + 服务),普通机械盘大于 20ms 属于偏慢;
svctm:磁盘实际服务耗时,与 await 差距越大,说明 IO 排队越严重。
iotop:定位高 IO 进程
iotop -oP # -o 只显示正在进行IO的进程,避免刷屏;-P 显示进程名
实战经验:
三、网络排障:从连通性到抓包的标准链路
排查顺序:连通性 → 端口监听 → 连接状态 → 抓包分析,从简单到复杂,不要上来就抓包。
1. 链路质量排查:mtr 替代 traceroute
# 用TCP+指定端口探测,避免运营商封禁ICMP导致结果不准mtr --tcp -P 8080 目标IP
实战判读:
2. 端口与连接:ss 全面替代 netstat
netstat 遍历 /proc 下所有进程,连接上万时会卡到死机;ss 直接读取内核状态,速度快数个量级,生产必用。
# 查看所有TCP连接及对应进程ss -antp# 查看连接状态汇总,快速判断TIME_WAIT是否过多ss -s# 查看指定端口是否监听ss -lntp | grep 8080
踩坑提醒:
3. 抓包定位:tcpdump
# 生产标准写法:指定网卡、过滤条件、限制包数、保存到文件tcpdump -i eth0 host 192.168.1.10 and port 8080 -w capture.pcap -c 1000
实战原则:
4. HTTP 服务排查:curl 高级用法
# 查看完整握手、请求响应头,排查连接/证书问题curl -v https://example.com# 快速获取状态码与总耗时,评估接口性能curl -o /dev/null -s -w "HTTP状态:%{http_code}\n总耗时:%{time_total}s\n" https://example.com
四、日志文本处理:三剑客实战组合技
日志排查核心是「快速过滤、精准提取、统计汇总」,是运维日常最高频的操作。
1. grep:关键词匹配 + 上下文查看
# 匹配错误关键词,显示行号,忽略大小写grep -in "error" app.log# 排查错误必备:显示匹配行前后5行,查看完整报错栈grep -C 5 "NullPointerException" app.log# 快速查看配置文件有效内容,排除注释和空行grep -vE '^#|^$' nginx.conf
2. awk:字段提取 + 统计汇总
# Nginx日志统计访问量Top10的IPawk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10# 统计500状态码请求总数awk '$9 == 500 {count++} END {print "500总数:" count}' access.log# 按时间段过滤日志,只看10点到12点的错误awk '$2 >= "10:00:00" && $2 <= "12:00:00" && $0 ~ /ERROR/' app.log
3. sed:批量修改 + 内容清理
# 生产修改配置必加备份,防止改错无法回滚sed -i.bak 's/old_param/new_param/g' app.conf# 批量删除注释行和空行,精简配置文件sed -i '/^#/d;/^$/d' app.conf
4. 大日志文件操作原则
五、进程深度调试:卡死、异常、资源泄漏定位
1. ps + pstree:进程全貌排查
# 全量进程列表ps aux# 树形展示进程父子关系,定位父进程、子进程数量异常pstree -p
实战经验:
2. lsof:万能调试工具
lsof 全称 list open files,Linux 一切皆文件,因此它可查端口、文件、句柄等多种信息。
# 查端口被哪个进程占用lsof -i:8080# 查看指定进程打开的所有文件lsof -p 进程PID# 定位删除未释放的文件,解决df与du不一致问题lsof | grep deleted
3. strace:跟踪系统调用,定位程序卡死
程序无响应、日志无输出时,用 strace 查看进程正在执行的系统调用,快速定位阻塞点。
# 跟踪指定进程的系统调用strace -p 进程PID# 统计系统调用耗时分布strace -c -p 进程PID
踩坑提醒:生产环境禁止长时间 strace,会显著拖慢进程性能,定位到问题立即停止。
六、提升效率的现代工具(生产常备)
以下工具非系统自带,但安装简单,能大幅提升排障效率:
htop/btop:替代 top,可视化更直观,同时展示 CPU、内存、磁盘、网络状态;
dust:替代 du,树形展示目录大小,一眼定位大文件;
ripgrep(rg):替代 grep,搜索速度快数倍,递归检索日志 / 代码神器;
tmux:终端会话管理,SSH 断网不中断,支持分屏,远程运维必备;
rsync:替代 scp,支持增量同步、断点续传,备份、传输大文件首选。
七、运维通用实战原则
先备份,再操作:修改配置、删除文件前必须备份;sed 修改优先使用-i.bak生成备份文件。
危险命令先验证:批量删除、批量替换类操作,先加 echo 打印操作内容,确认无误再执行。
先宏观,后微观:排障不要直接钻细节,先看整体负载、磁盘、网络,缩小范围再定位具体进程。
生产操作留痕:重要变更记录时间、操作人、变更内容,便于回滚与复盘。
不滥用 kill -9:优先kill -15让进程优雅退出,数据库、中间件类服务严禁随意强制终止。
快速排查思路总结
系统卡顿:uptime看负载 → top看 CPU / 内存 → iostat看 IO → iotop找高消耗进程
服务不可达:ping测连通 → nc测端口 → ss看监听 → 查防火墙 / 安全组 → tcpdump抓包
业务报错:grep找关键词 → awk统计规律 → less看完整上下文
磁盘满:df定位分区 → du找大文件 → lsof排查未释放句柄