Linux系统故障排查:CPU、内存、磁盘与网络工具指南
2026/8/9 12:59:39 网站建设 项目流程

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:现代版netstat
  • tcpdump:抓包分析终极工具

提示:建议将这些工具预装在所有生产服务器上,可以创建/opt/tools目录统一存放编译好的二进制文件,避免依赖问题。

1.2 排查前的环境准备

在开始具体排查前,需要做好以下准备工作:

  1. 建立基准数据

    • 记录系统正常时的性能指标(如/proc/meminfo内容)
    • 保存/proc/cpuinfolscpu的输出
    • 使用df -hlsblk记录磁盘布局
  2. 配置SSH保活

    echo "ServerAliveInterval 60" >> ~/.ssh/config

    防止排查过程中连接超时中断

  3. 安装诊断增强包

    # RHEL/CentOS yum install sysstat dstat -y # Debian/Ubuntu apt install sysstat dstat iotop -y
  4. 权限准备

    • 确保有sudo权限或root账户
    • 对容器环境需挂载/proc/sys

2. 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

关注cs(context 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 '{sum=0; for (i=2; i<=NF; 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>减少不必要的syscall
CPU温度过高散热故障sensors清理风扇或降频

经验:遇到CPU问题时,先区分是用户态(应用问题)还是内核态(系统问题),这个判断能节省50%的排查时间。

3. 内存故障精准定位方法

内存问题往往比CPU更隐蔽,表现为OOM(Out 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 -10

3.2 内存泄漏排查

对于长时间运行的服务,内存泄漏是常见问题:

步骤1:监控进程内存增长

watch -n 60 'smem -t -k -p | grep <process_name>'

步骤2:valgrind检测(需重启服务)

valgrind --leak-check=full --show-leak-kinds=all ./your_program

步骤3:分析/proc内存映射

cat /proc/<pid>/smaps | grep -i heap

观察RSSPSS值的变化趋势

3.3 交换分区优化策略

当物理内存不足时,交换分区(swap)的使用会显著影响性能:

查看交换活动

vmstat -S m 2

关注si(swap in)和so(swap out)列

优化建议

  1. 对于SSD设备,可适当增加swapiness:
    echo 60 > /proc/sys/vm/swappiness
  2. 对于机械硬盘,建议减少交换使用:
    echo 10 > /proc/sys/vm/swappiness

创建高性能交换文件

dd if=/dev/zero of=/swapfile bs=1G count=8 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 | head

inode耗尽检查

df -i

IUse%接近100%时,即使空间足够也会报错

RAID性能分析

cat /proc/mdstat mdadm --detail /dev/md0

检查RAID同步状态和降级情况

4.3 文件系统问题处理

修复损坏的ext4文件系统

umount /dev/sdb1 fsck -y /dev/sdb1

XFS检查与修复

xfs_repair /dev/sdb1

NFS客户端挂载优化

mount -o rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,timeo=600,retrans=2

5. 网络故障排查全流程

网络问题排查需要从协议栈底层开始,逐步向上分析。

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

关注:

  • SpeedDuplex是否正确
  • Link detected是否为yes
  • 错误计数(RX errors/TX errors

5.2 高级网络分析

TCP连接状态统计

ss -s

重点关注TIME-WAITCLOSE-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_max=16777216 sysctl -w net.core.wmem_max=16777216

6. 综合故障排查案例

在实际生产环境中,问题往往不是单一维度的。以下是几个典型复合问题的排查思路:

案例1:数据库响应慢

  1. 先用top检查CPU和内存
  2. iostat查看磁盘I/O
  3. ss -tnp | grep mysql检查连接数
  4. pt-query-digest分析慢查询

案例2:Web服务间歇性超时

  1. ping -f测试基础连通性
  2. tcpdump -i eth0 -w capture.pcap抓包
  3. Wireshark分析TCP重传
  4. 检查/var/log/messages中的内核日志

案例3:批量任务执行卡死

  1. strace -ff -p <pid>跟踪系统调用
  2. lsof -p <pid>查看打开的文件
  3. gdb -p <pid>附加调试(谨慎使用)
  4. 检查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.log

Prometheus + Grafana方案

  1. Node Exporter采集基础指标
  2. cAdvisor监控容器
  3. AlertManager配置告警规则
  4. Grafana展示关键仪表盘

日志集中分析

  • ELK Stack(Elasticsearch+Logstash+Kibana)
  • 或Loki+Promtail+Grafana轻量方案

8. 排查工具箱增强

除了系统自带工具,这些第三方工具能极大提升效率:

性能分析增强

  • bpftrace:新一代内核追踪工具
  • sysdig:全系统捕获与分析
  • netdata:实时性能仪表盘

日志分析

  • lnav:日志文件导航器
  • multitail:多文件尾随查看

网络测试

  • iperf3:带宽测试
  • nmap:端口扫描
  • wrk:HTTP压力测试

硬件诊断

  • stress-ng:压力测试
  • smartmontools:硬盘SMART检测
  • dmidecode:硬件信息提取

在实际工作中,我习惯将这些工具打包成容器镜像,方便在不同环境快速部署使用:

docker run -it --privileged --net=host -v /:/host registry.example.com/diag-tools:v1

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询