Linux运维必备:10个紧急故障排查命令 1. 运维老炮儿的Linux救命命令清单当服务器突然崩溃、服务异常或者系统资源耗尽时每个运维工程师都需要一套快速诊断和恢复的工具箱。这些命令不是日常使用的花拳绣腿而是真正能在危急时刻帮你定位问题、恢复服务的救命稻草。我整理了10个在真实生产环境中反复验证过的命令它们的特点是无需安装额外工具大多数Linux发行版原生支持输出信息直击要害避免无关细节干扰判断组合使用可以覆盖90%以上的紧急故障场景2. 系统负载与资源瓶颈排查2.1 综合负载检查top的进阶用法普通top命令只能看个大概老手会这样用top -b -n 1 | head -n 20-b参数让top以批处理模式运行-n 1表示只采集一次数据。配合head可以快速获取关键指标而不被持续刷屏干扰。关键指标解读load average三个数值分别代表1分钟、5分钟、15分钟的平均负载超过CPU核心数2倍就需要警惕%Cpu(s)重点关注us(用户空间)和sy(内核空间)占比如果sy过高可能内核有瓶颈RES列进程实际占用内存单位KB2.2 内存泄露快速定位当发现系统内存持续增长时ps aux --sort-%mem | head -n 10这个组合会按内存占用降序排列进程显示前10个内存消耗大户。比单纯看free命令更能直接定位问题进程。注意有些Java应用显示的内存占用可能包含共享库实际独占内存可能比显示值小3. 磁盘I/O问题诊断3.1 磁盘空间紧急释放当收到磁盘满报警时du -h --max-depth1 / | sort -hr | head -n 10这个命令组合会扫描根目录下各一级子目录大小(--max-depth1)以人类可读格式显示(-h)按大小降序排序(sort -hr)只显示前10个最大目录通常可以快速定位到日志目录(/var/log)或临时文件目录(/tmp)的异常增长。3.2 I/O性能实时监控iostat -x 1 5关键参数说明-x显示扩展统计信息1每秒采集一次5共采集5次重点关注指标指标正常范围异常表现%util60%80%表示磁盘饱和await10ms50ms表示延迟过高svctm5ms接近await表示队列堆积4. 网络连接分析4.1 异常连接快速筛查ss -tulnp | grep -E LISTEN|ESTAB比netstat更高效的ss命令可以显示-tTCP连接-uUDP连接-l监听中的端口-n显示数字端口号-p显示进程信息配合grep过滤后可以快速发现异常监听端口或异常活跃连接。4.2 网络带宽占用排行nethogs eth0 -d 1需要先安装nethogs工具yum install nethogs或apt install nethogs。这个命令可以实时显示每个进程的网络带宽占用-d 1表示每秒刷新一次按流量降序排列当服务器带宽突然跑满时这是定位元凶的最快方法。5. 进程与服务异常处理5.1 僵尸进程清理ps -A -ostat,ppid | grep -e [zZ] | awk {print $2} | xargs kill -9这个命令组合会列出所有进程状态和父进程ID过滤出状态为Z(zombie)的进程提取其父进程ID强制结束这些父进程僵尸进程积累过多会导致进程号耗尽这个命令可以批量清理。5.2 服务启动失败排查journalctl -u nginx --since 1 hour ago --no-pager使用systemd的系统可以通过journalctl查看服务日志-u指定服务名--since限定时间范围--no-pager直接输出不进入分页比直接看/var/log/messages更精准高效。6. 系统配置检查6.1 关键参数快速验证sysctl -a | grep -E vm.swappiness|net.ipv4.tcp_tw_reuse这个命令可以检查影响系统性能的关键内核参数vm.swappiness内存交换倾向生产环境建议10以下net.ipv4.tcp_tw_reuseTIME_WAIT套接字重用高并发服务建议开启6.2 文件描述符检查ls -l /proc/$(pgrep nginx)/fd | wc -l这个命令组合可以获取nginx主进程ID列出其打开的所有文件描述符统计数量当服务报too many open files错误时可以快速确认实际使用量。7. 组合命令实战案例7.1 网站响应慢问题排查time curl -o /dev/null -s -w %{http_code} %{time_total}\n http://localhost \ ss -tulp | grep 80 \ top -b -n 1 | head -n 10这个组合命令会测量访问本地服务的响应时间和状态码检查80端口的连接状态查看系统资源使用情况7.2 数据库连接泄露定位mysqladmin processlist | grep -v Sleep | wc -l \ netstat -ant | grep 3306 | wc -l \ ps aux | grep mysqld | awk {print $6/1024 MB}这个组合可以统计非空闲的MySQL连接数统计3306端口的TCP连接数查看mysqld进程的内存占用8. 命令输出解析技巧8.1 使用awk提取关键信息ps aux | awk $3 10 {print $2, $3, $11} | sort -k2 -nr这个命令会列出所有进程用awk过滤CPU使用率10%的进程只显示PID、CPU%和命令名按CPU使用率降序排列8.2 使用column美化输出df -h | column -tcolumn -t可以将不整齐的输出自动对齐为表格特别适合在终端查看宽幅数据。9. 历史命令快速复用9.1 使用history过滤history | grep nginx | grep restart可以快速找到之前执行过的nginx重启命令避免重复输入长命令。9.2 使用!快捷调用!ss直接重复执行最近一条以ss开头的命令适合需要反复执行的监控命令。10. 终极救命命令当系统完全无响应时通过串口或IPMI连接后echo 1 /proc/sys/kernel/sysrq \ echo c /proc/sysrq-trigger这会触发系统产生一个crash dump至少可以保存现场信息供后续分析。注意这个命令会导致系统立即崩溃只在万不得已时使用。