在 Linux 系统运维中,硬件故障是影响服务稳定性的核心因素。无论是服务器突然宕机、存储 I/O 卡顿,还是网络丢包异常,都需要通过命令行快速定位硬件问题。掌握硬件信息查看与故障排查命令,不仅能缩短故障响应时间,更能提前预判硬件老化风险。本文将从实战角度出发,系统梳理 CPU、内存、磁盘等核心硬件的排查命令,重点拆解高级技巧,帮助运维人员从 “会用命令” 进阶到 “精通诊断”。
CPU 作为系统运算核心,其性能瓶颈或硬件故障会直接导致服务卡顿。本节不仅介绍基础信息查看命令,更聚焦高负载诊断与故障定位技巧。
lscpu # 显示CPU核心数、线程数、架构、缓存大小等关键信息
\# 关键输出解读:
\# CPU(s):总逻辑CPU数(核心数×线程数)
\# Core(s) per socket:每颗CPU的物理核心数
\# Cache L3:三级缓存大小(影响多任务处理性能)cat /proc/cpuinfo | grep -E "model name|cpu cores|siblings"
\# 筛选关键信息:CPU型号、物理核心数、逻辑线程数
\# 注意:多CPU服务器需结合"siblings"判断超线程是否开启P键按 CPU 使用率排序)%us(用户态 CPU 占比)、%sy(内核态 CPU 占比)、%wa(等待 I/O 的 CPU 占比)%wa过高→磁盘 I/O 瓶颈;%sy过高→内核线程或系统调用异常pidstat -u 1 # 每秒输出一次进程CPU使用情况
\# 场景:当top显示CPU负载高时,用此命令定位具体进程(如Java进程、数据库进程)sensors命令(需安装 lm-sensors)sensors | grep "Core" # 查看各核心温度
\# 预警阈值:一般CPU耐受温度≤85℃,超过90℃需检查散热风扇或硅脂dmesg | grep -i "cpu error|mce" # 查找CPU硬件错误(如机器检查异常MCE)
\# 若出现"MCE: Hardware Error",需进一步用mcelog工具分析错误类型(如缓存错误、总线错误)内存泄漏、物理内存不足是 Linux 系统常见问题,本节重点讲解内存硬件信息获取与故障定位方法。
free -h
\# 关键指标解读:
\# Mem: total(总内存)、used(已使用)、available(可用内存,含缓存)
\# 误区:不要仅看used占比,需关注available是否充足(缓存可释放)dmidecode -t memory | grep -E "Size|Type|Speed|Locator"
\# 关键信息:内存容量、类型(DDR4/DDR5)、频率(如3200 MT/s)、插槽位置
\# 场景:排查内存不兼容问题(如混合插入不同频率内存导致降频)M键按内存使用率排序,观察进程内存变化vmstat 1
\# 关键指标:
\# si(每秒从交换分区读入内存的大小)、so(每秒写入交换分区的大小)
\# 预警:si/so持续大于0→物理内存不足,需检查内存使用或扩容pmap -x 12345 # 12345为进程PID
\# 场景:Java进程内存泄漏时,可结合此命令查看堆内存(heap)或共享库占用情况dmesg | grep -i "memory error|uncorrectable"
\# 若出现"Uncorrectable Memory Error",需更换故障内存插槽或内存条磁盘是系统存储核心,其 I/O 性能与健康状态直接影响服务响应速度,本节重点讲解磁盘分区、健康检查与 I/O 瓶颈诊断。
lsblk # 输出格式:NAME(设备名)、SIZE(容量)、MOUNTPOINT(挂载点)
\# 场景:快速确认/dev/sda1挂载到/boot,/dev/mapper/cl-home挂载到/homefdisk -l /dev/sda # 查看/dev/sda磁盘的分区信息
\# 关键信息:Partition Type(分区类型,如Linux LVM)、Start/End(分区起始/结束扇区)blkid /dev/sda2 # 输出UUID和文件系统类型(如ext4、xfs)
\# 1. 检查磁盘是否支持SMART
smartctl -i /dev/sda | grep "SMART support is"
\# 2. 执行磁盘健康检测(短检测约2分钟,长检测约1小时)
smartctl -t short /dev/sda # 短检测
smartctl -t long /dev/sda # 长检测
\# 3. 查看检测结果
smartctl -a /dev/sda | grep -E "SMART overall-health|Failed"
\# 关键判断:"SMART overall-health self-assessment test result: PASSED"为正常
\# 若出现"Failed Attributes",需立即备份数据并更换磁盘(如"Current\_Pending\_Sector"非0→坏道)iostat -x 1 # 每秒输出一次磁盘I/O统计
\# 关键指标:
\# %util:磁盘繁忙程度(持续>80%→I/O瓶颈)
\# rMB/s/wMB:每秒读写MB数(结合业务判断是否超过磁盘性能上限)
\# avgqu-sz:平均I/O队列长度(>2→队列拥堵)iotop # 按"o"键仅显示有I/O活动的进程
\# 场景:当iostat显示%util过高时,用此命令定位具体进程(如数据库备份、日志写入进程)\# 测试随机写性能(16线程,块大小4K,测试10秒)
fio -name=randwrite -filename=/tmp/test -direct=1 -rw=randwrite -bs=4k -size=1G -numjobs=16 -runtime=10 -group\_reporting
\# 关键结果:IOPS(每秒I/O操作数)、BW(带宽),用于对比磁盘标称性能(如SSD IOPS应≥1万)网络故障是 Linux 服务不可用的常见原因,本节从接口信息、连接状态、连通性三个维度梳理排查命令。
ip a # 输出关键信息:
\# inet:IP地址(如192.168.1.100/24)
\# link/ether:MAC地址
\# state:接口状态(UP/DOWN,DOWN需检查网卡硬件或驱动)ethtool eth0 # 查看eth0网卡信息
\# 关键信息:
\# Speed:网卡速率(如1000Mb/s→千兆)
\# Duplex:双工模式(Full→全双工,Half→半双工,半双工可能导致网络丢包)
\# Link detected:是否检测到网线(no→检查网线或交换机端口)ss -tunlp | grep 8080 # 查看8080端口的监听进程
\# 输出解读:
\# tcp LISTEN 0 128 :::8080 :::\* users:(("java",pid=1234,fd=6))
\# 场景:排查端口被占用问题(如启动服务时提示"address already in use")ss -tan | grep -E "ESTAB|TIME\_WAIT|CLOSE\_WAIT" | wc -l
\# 关键状态解读:
\# ESTAB:已建立连接(正常业务连接)
\# TIME\_WAIT:连接关闭后等待回收(过多可能导致端口耗尽)
\# CLOSE\_WAIT:被动关闭连接未释放(需检查应用是否正确关闭连接)\# 1. 测试与目标IP的基础连通性
ping -c 10 192.168.1.200 # 发送10个ICMP包,查看丢包率(loss%)
\# 2. 追踪路由路径(定位丢包节点)
mtr 192.168.1.200 # 实时显示路由各节点的丢包率和延迟(比traceroute更直观)
\# 场景:若ping目标丢包,用mtr查看是网关、交换机还是目标服务器的问题\# 抓取eth0网卡上80端口的TCP数据包(保存到文件)
tcpdump -i eth0 tcp port 80 -w /tmp/traffic.pcap
\# 后续可用Wireshark打开pcap文件分析(如排查HTTP请求是否正常、是否有恶意流量)PCI 设备(如显卡、网卡、RAID 卡)和 USB 设备(如 U 盘、外接硬盘)的识别与故障排查,是硬件运维的重要环节。
lspci # 输出格式:总线号:设备号.功能号 设备类型(如Ethernet controller)
\# 1. 查看网卡对应的PCI设备(结合设备类型筛选)
lspci | grep "Ethernet controller"
\# 2. 查看设备详细信息(含驱动模块、中断号)
lspci -vnn -s 02:00.0 # 02:00.0为PCI设备地址(从lspci输出获取)
\# 关键信息:Kernel driver in use(当前使用的驱动模块,如igb、e1000)
\# 场景:排查PCI设备驱动未加载问题(若显示"Kernel driver in use: \<none>",需安装对应驱动)lsusb # 输出格式:Bus号 Device号 ID 厂商ID:产品ID 设备名称
\# 1. 查看USB设备详细信息(含供电、速度)
lsusb -v -s 001:005 # 001:005为Bus号:Device号(从lsusb输出获取)
\# 2. 查看USB设备挂载情况(排查外接硬盘未识别问题)
dmesg | grep -i "usb storage|sd" # 查看USB存储设备的识别日志
\# 场景:若U盘插入后未显示,用此命令判断是USB端口故障还是设备本身问题\# CentOS/RHEL
yum install lm-sensors -y
\# Ubuntu/Debian
apt install lm-sensors -y
\# 检测硬件传感器(首次安装需执行)
sensors-detect # 按提示选择默认即可(自动识别传感器类型)sensors # 输出CPU、主板、硬盘温度
\# 自定义监控脚本(示例:温度超过阈值发送邮件告警)
\#!/bin/bash
TEMP=\$(sensors | grep "Core 0" | awk '{print \$3}' | cut -d'+' -f2 | cut -d'.' -f1)
if \[ \$TEMP -gt 85 ]; then
  echo "CPU温度过高:\$TEMP℃" | mail -s "硬件温度告警" admin@example.com
fi系统日志是排查硬件故障的 “黑匣子”,核心日志工具包括dmesg和journalctl。
\# 查看最近的硬件相关日志(按时间排序,最新日志在最后)
dmesg -T | grep -i "hardware|error|fail"
\# 关键日志解读:
\# "eth0: link down"→网卡连接断开
\# "sda: error reading sector 12345"→磁盘扇区读取错误(需检查磁盘健康)
\# "USB device not accepting address"→USB设备识别失败(端口或设备故障)\# 查看今天的内核日志(-k:仅显示内核日志,--since:按时间筛选)
journalctl -k --since "today" | grep -i "mce|memory|disk"
\# \</doubaocanvas>