
1. Linux系统故障排查的必要性与基础准备在运维工程师的日常工作中Linux系统故障排查就像医生的诊断过程。当系统出现性能问题时CPU、内存、硬盘和网络这四大核心组件往往是最关键的排查方向。根据我十五年的运维经验80%的系统异常都源于这四类资源的配置不当或异常占用。1.1 排查工具全家福工欲善其事必先利其器以下是我在长期实践中总结的必备工具集CPU相关top/htop实时进程监控的瑞士军刀mpstat多核CPU使用率细分统计perf性能分析神器需内核支持pidstat进程级CPU使用统计内存相关free -m基础内存使用情况vmstat 2每隔2秒输出虚拟内存统计smem更精准的内存占用分析valgrind内存泄漏检测开发环境硬盘相关iostat -x 2磁盘I/O详细统计iotop类似top的磁盘I/O监控smartctl硬盘健康状态检测lsof查看文件打开情况网络相关iftop实时带宽监控nethogs进程级网络流量ss -tulnp现代版netstattcpdump抓包分析终极工具提示建议将这些工具预装在所有生产服务器上可以创建/opt/tools目录统一存放编译好的二进制文件避免依赖问题。1.2 排查前的环境准备在开始具体排查前需要做好以下准备工作建立基准数据记录系统正常时的性能指标如/proc/meminfo内容保存/proc/cpuinfo和lscpu的输出使用df -h和lsblk记录磁盘布局配置SSH保活echo ServerAliveInterval 60 ~/.ssh/config防止排查过程中连接超时中断安装诊断增强包# RHEL/CentOS yum install sysstat dstat -y # Debian/Ubuntu apt install sysstat dstat iotop -y权限准备确保有sudo权限或root账户对容器环境需挂载/proc和/sys2. CPU故障深度排查指南CPU异常是Linux系统中最常见的性能瓶颈主要表现为负载飙升、响应延迟和进程卡死。根据CPU架构不同如x86与ARM具体表现可能有所差异。2.1 快速定位CPU高负载第一步整体负载检查uptime # 输出示例12:30:45 up 15 days, 3:21, 2 users, load average: 4.32, 3.78, 2.15重点关注1分钟负载值超过CPU核心数2倍即需警惕第二步进程级分析top -b -n 1 | head -20或使用更直观的htop需安装第三步上下文切换分析vmstat 2 5关注cscontext switch列突然增高可能预示锁竞争2.2 高级诊断技巧当常规方法无法定位问题时需要更深入的诊断案例偶发性CPU飙高perf record -a -g -F 997 sleep 30 perf report --stdio这会记录30秒内所有CPU调用栈生成火焰图99.23% swapper | ---cpu_idle do_idle cpu_startup_entry start_secondary secondary_startup_64中断不平衡排查cat /proc/interrupts | awk {sum0; for (i2; iNF; i) sum$i; print $1,sum} | sort -k2 -nr | head输出各CPU核心处理的中断数偏差超过30%需注意2.3 常见CPU问题与解决方案问题现象可能原因验证命令解决方案负载高但CPU使用率低磁盘I/O等待iostat -x 2优化磁盘或迁移服务用户态CPU占比高业务代码问题pidstat -u 2代码性能优化系统态CPU占比高系统调用频繁strace -cp pid减少不必要的syscallCPU温度过高散热故障sensors清理风扇或降频经验遇到CPU问题时先区分是用户态应用问题还是内核态系统问题这个判断能节省50%的排查时间。3. 内存故障精准定位方法内存问题往往比CPU更隐蔽表现为OOMOut Of Memory killer触发、交换分区频繁使用或直接系统崩溃。3.1 内存基础诊断真实内存使用情况free -m注意available列而非free列现代Linux会积极利用缓存详细内存分布cat /proc/meminfo | grep -E MemTotal|MemFree|Buffers|Cached|Swap进程级内存排行ps aux --sort-%mem | head -103.2 内存泄漏排查对于长时间运行的服务内存泄漏是常见问题步骤1监控进程内存增长watch -n 60 smem -t -k -p | grep process_name步骤2valgrind检测需重启服务valgrind --leak-checkfull --show-leak-kindsall ./your_program步骤3分析/proc内存映射cat /proc/pid/smaps | grep -i heap观察RSS和PSS值的变化趋势3.3 交换分区优化策略当物理内存不足时交换分区swap的使用会显著影响性能查看交换活动vmstat -S m 2关注siswap in和soswap out列优化建议对于SSD设备可适当增加swapinessecho 60 /proc/sys/vm/swappiness对于机械硬盘建议减少交换使用echo 10 /proc/sys/vm/swappiness创建高性能交换文件dd if/dev/zero of/swapfile bs1G count8 chmod 600 /swapfile mkswap /swapfile swapon /swapfile添加到/etc/fstab实现开机自动挂载4. 硬盘I/O问题排查实战磁盘性能问题往往表现为系统卡顿、服务超时特别是在数据库等I/O密集型场景中。4.1 基础I/O性能评估实时I/O监控iostat -xdm 2关键指标%util设备利用率 70%需警惕await平均I/O等待时间 10ms需优化svctm设备处理时间进程级I/O统计iotop -oP显示实际进行磁盘读写的进程4.2 深度诊断技巧查找热点文件lsof D /var/log | awk {print $9} | sort | uniq -c | sort -nr | headinode耗尽检查df -i当IUse%接近100%时即使空间足够也会报错RAID性能分析cat /proc/mdstat mdadm --detail /dev/md0检查RAID同步状态和降级情况4.3 文件系统问题处理修复损坏的ext4文件系统umount /dev/sdb1 fsck -y /dev/sdb1XFS检查与修复xfs_repair /dev/sdb1NFS客户端挂载优化mount -o rw,bg,hard,nointr,rsize32768,wsize32768,tcp,timeo600,retrans25. 网络故障排查全流程网络问题排查需要从协议栈底层开始逐步向上分析。5.1 基础连通性检查快速诊断脚本ping -c 4 8.8.8.8 traceroute -n 8.8.8.8 curl -I https://example.com nc -zv example.com 443网卡状态检查ethtool eth0关注Speed和Duplex是否正确Link detected是否为yes错误计数RX errors/TX errors5.2 高级网络分析TCP连接状态统计ss -s重点关注TIME-WAIT和CLOSE-WAIT状态数量流量热点分析iftop -nNP实时查看各连接的带宽占用丢包定位mtr --report-wide --tcp --port 80 example.com结合traceroute和ping的增强工具5.3 内核参数调优缓解TIME-WAIT过多echo 1 /proc/sys/net/ipv4/tcp_tw_reuse echo 1 /proc/sys/net/ipv4/tcp_tw_recycle增大连接跟踪表echo 65536 /proc/sys/net/netfilter/nf_conntrack_max调整缓冲区大小sysctl -w net.core.rmem_max16777216 sysctl -w net.core.wmem_max167772166. 综合故障排查案例在实际生产环境中问题往往不是单一维度的。以下是几个典型复合问题的排查思路案例1数据库响应慢先用top检查CPU和内存iostat查看磁盘I/Oss -tnp | grep mysql检查连接数pt-query-digest分析慢查询案例2Web服务间歇性超时ping -f测试基础连通性tcpdump -i eth0 -w capture.pcap抓包Wireshark分析TCP重传检查/var/log/messages中的内核日志案例3批量任务执行卡死strace -ff -p pid跟踪系统调用lsof -p pid查看打开的文件gdb -p pid附加调试谨慎使用检查ulimit -a资源限制7. 自动化监控方案对于长期运维建议建立自动化监控体系基础监控项配置# CPU */1 * * * * /usr/bin/mpstat 1 60 /var/log/cpu.log # 内存 */5 * * * * /usr/bin/free -m /var/log/mem.log # 磁盘 0 * * * * /usr/bin/iostat -xdm 1 60 /var/log/disk.log # 网络 */2 * * * * /usr/bin/ss -s /var/log/network.logPrometheus Grafana方案Node Exporter采集基础指标cAdvisor监控容器AlertManager配置告警规则Grafana展示关键仪表盘日志集中分析ELK StackElasticsearchLogstashKibana或LokiPromtailGrafana轻量方案8. 排查工具箱增强除了系统自带工具这些第三方工具能极大提升效率性能分析增强bpftrace新一代内核追踪工具sysdig全系统捕获与分析netdata实时性能仪表盘日志分析lnav日志文件导航器multitail多文件尾随查看网络测试iperf3带宽测试nmap端口扫描wrkHTTP压力测试硬件诊断stress-ng压力测试smartmontools硬盘SMART检测dmidecode硬件信息提取在实际工作中我习惯将这些工具打包成容器镜像方便在不同环境快速部署使用docker run -it --privileged --nethost -v /:/host registry.example.com/diag-tools:v1