Loading...

文章背景图

002-Linux系统基础排查手册-v2

2026-06-02
25
-
- 分钟
|

Linux 系统基础排查手册

文档信息

  • 文档名称:Linux 系统基础排查手册
  • 版本:v2.0
  • 创建日期:2026-06-02
  • 适用系统:Ubuntu 20.04+/CentOS 7+/RHEL 7+
  • 维护人:guobin

目录

  1. CPU 过高排查
  2. 内存过高排查
  3. 磁盘问题排查
  4. 网络问题排查
  5. 系统负载过高排查
  6. 资源限制排查

1. CPU 过高排查

1.1 问题现象

  • 系统响应缓慢
  • top 显示 CPU 使用率持续高于 80%
  • 应用程序卡顿或超时

1.2 排查思路

  1. 识别占用 CPU 最高的进程
  2. 分析进程的线程级 CPU 使用
  3. 检查是否存在僵尸进程或死循环
  4. 排查定时任务或后台进程

1.3 排查命令与指标分析

1.3.1 查看整体 CPU 使用

# 实时查看 CPU 使用(按 q 退出)
top

执行后关注指标:

  • %Cpu(s) 行整体使用率
  • us:用户空间 CPU 使用率(正常值 < 70%)
  • sy:系统内核 CPU 使用率(正常值 < 30%)
  • id:CPU 空闲率(应该 > 30%)
  • wa:IO 等待率(> 5% 说明磁盘瓶颈)
  • load average:三个负载值(与 CPU 核心数比较)

# 批处理模式查看一次
top -bn1

执行后关注指标:

  • 进程列表中的 %CPU 列(找出高占用进程)
  • COMMAND 列确认进程名称
  • PID 列记录问题进程 ID

# 查看 CPU 统计
mpstat 1 1

执行后关注指标:

  • %usr:用户 CPU 使用率
  • %sys:系统 CPU 使用率
  • %iowait:IO 等待(> 10% 需关注)
  • %idle:空闲 CPU(应该 > 30%)

# 查看每个 CPU 核心的使用情况
mpstat -P ALL 1 1

执行后关注指标:

  • 各核心的 %usr%sys%idle
  • 是否有单个核心达到 100%
  • 负载是否均衡分布

1.3.2 找出 CPU 占用最高的进程

# 按 CPU 使用率排序,显示前 10
ps aux --sort=-%cpu | head -11

执行后关注指标:

  • %CPU 列(> 50% 的进程需要关注)
  • %MEM 列(确认是否内存也高)
  • PIDCOMMAND(定位问题进程)
  • USER 列(确认是哪个用户的进程)

# 使用 top 交互式查看(按 P 键按 CPU 排序)
top

执行后关注指标:

  • P 键按 CPU 排序
  • 观察进程 CPU 变化趋势
  • H 键显示线程级信息
  • TIME+ 列查看 CPU 累计使用时间

# 查看特定进程的线程
top -H -p <PID>

执行后关注指标:

  • %CPU 列找出占用最高的线程
  • LWP 列是线程 ID
  • COMMAND 列查看线程名
  • 确认是单线程还是多线程问题

# 使用 htop(更友好的界面)
htop

执行后关注指标:

  • 各 CPU 核心的条形图
  • 进程树结构(按 F5 展开)
  • 内存和交换分区使用
  • 进程的颜色标识(红色=高 CPU)

1.3.3 分析进程详细信息

# 查看进程的完整命令行
ps aux | grep <PID>

执行后关注指标:

  • 完整的启动命令和参数
  • 进程的工作目录
  • 确认是预期进程还是异常进程

# 查看进程的线程信息
ps -T -p <PID>

执行后关注指标:

  • SPID:线程 ID
  • %CPU:每个线程的 CPU 使用
  • 线程数量是否合理
  • 是否有异常活跃的线程

# 查看进程的系统调用(需要 root)
strace -p <PID> -c

执行后关注指标:

  • % time:各系统调用占用时间比例
  • calls:调用次数最多的系统调用
  • syscalls:频繁的是 read/write 还是其他
  • 确认性能瓶颈在哪个环节

# 查看进程的内存映射
pmap <PID>

执行后关注指标:

  • 总内存使用 total
  • 大内存块的标识
  • 是否有异常的内存映射
  • 共享库的加载情况

# 查看进程的文件描述符
lsof -p <PID>

输出字段详解:

字段 含义 说明
COMMAND 进程名 正在运行的进程名称
PID 进程ID 进程的唯一标识符
USER 进程所有者 运行该进程的用户
FD 文件描述符 文件描述符编号或类型(如 cwdtxtmemDEL0r1w2w
TYPE 文件类型 REG(普通文件)、DIR(目录)、IPv4/IPv6(网络连接)、unix(Unix socket)、FIFO(管道)
DEVICE 设备标识 存储设备的主/次设备号
SIZE/OFF 文件大小/偏移量 文件大小或文件中的偏移位置
NODE inode号 文件系统中的inode编号
NAME 文件/路径/连接信息 文件路径、socket地址或设备名

FD 字段常见值:

含义 说明
cwd 当前工作目录 Current Working Directory
txt 程序文本段 可执行文件本身
mem 内存映射文件 共享库或内存映射
DEL 删除的文件 已删除但仍被进程引用
0r 标准输入(读) 文件描述符 0,只读
1w 标准输出(写) 文件描述符 1,只写
2w 标准错误(写) 文件描述符 2,只写
Nw/r/u 普通文件描述符 N为数字,r=读,w=写,u=读写
unix Unix socket 本地进程间通信
IPv4/IPv6 网络连接 TCP/UDP 网络连接

TYPE 字段常见值:

含义 说明
REG 普通文件 常规文件
DIR 目录 目录
CHR 字符设备 终端、键盘等字符设备
BLK 块设备 磁盘等块设备
FIFO 管道 命名管道
IPv4 IPv4 连接 TCP/IPv4 网络连接
IPv6 IPv6 连接 TCP/IPv6 网络连接
unix Unix socket Unix域socket

执行后关注指标:

  1. 文件描述符总数:执行 lsof -p <PID> | wc -l 统计,超过 1024 需关注
  2. DEL 类型文件lsof -p <PID> | grep DEL,表示已删除但未释放的文件,可能导致磁盘空间不释放
  3. 网络连接数lsof -p <PID> | grep -E 'IPv4|IPv6' | wc -l,检查是否有过多连接
  4. TIME_WAIT 状态:网络连接是否有大量 TIME_WAIT
  5. socket 连接:查看 NAME 列的远程地址和端口
  6. 未关闭的日志文件:检查是否有大量打开的日志文件
  7. 共享库数量lsof -p <PID> | grep mem | wc -l,是否加载过多库
  8. 标准输出/错误:检查 1w、2w 是否指向正确位置

常见问题排查:

问题 排查方法
文件句柄泄漏 `lsof -p
磁盘空间不释放 `lsof -p
连接泄漏 `lsof -p
日志文件过多 `lsof -p

1.3.4 检查僵尸进程

# 查找僵尸进程
ps aux | grep Z

执行后关注指标:

  • STAT 列为 Z 的进程
  • 记录僵尸进程的 PID
  • 查看其父进程 PPID

# 统计僵尸进程数量
ps aux | grep -c Z

执行后关注指标:

  • 结果 > 0 说明有僵尸进程
  • 数量持续增加说明有问题
  • 需要找到并处理父进程

# 强制杀死僵尸进程(需要父进程 PID)
kill -9 <父进程PID>

执行后关注指标:

  • 确认僵尸进程是否消失
  • 父进程是否正常重启
  • 再次检查是否有新僵尸进程

1.3.5 检查定时任务

# 查看当前用户的 cron 任务
crontab -l

执行后关注指标:

  • 是否有每分钟执行的任务
  • 任务执行时间是否合理
  • 任务脚本是否有性能问题
  • 注释说明任务用途

# 查看系统 cron 任务
ls -la /etc/cron.*

执行后关注指标:

  • /etc/cron.hourly:每小时执行的任务
  • /etc/cron.daily:每天执行的任务
  • /etc/cron.monthly:每月执行的任务
  • 任务执行时间是否在业务高峰期

# 查看 anacron 任务
cat /etc/anacrontab

执行后关注指标:

  • 延迟时间 delay in minutes
  • 任务执行周期
  • 是否与 cron 冲突

1.4 解决方案

问题类型 解决方案
单个进程占用过高 优化代码、增加资源限制、考虑横向扩展
多个进程占用过高 检查是否有异常进程、考虑资源分配
僵尸进程 重启父进程或强制杀死
死循环 定位并修复代码逻辑
定时任务 优化任务执行时间、增加间隔

1.5 Ubuntu vs CentOS 差异

命令 Ubuntu CentOS
安装工具 sudo apt install sysstat htop sudo yum install sysstat htop
服务管理 systemctl systemctl
进程管理 相同 相同

2. 内存过高排查

2.1 问题现象

  • 系统响应缓慢或无响应
  • OOM(Out of Memory)杀手启动
  • free 显示可用内存极低
  • 应用程序报内存不足错误

2.2 排查思路

  1. 查看内存整体使用情况
  2. 识别占用内存最高的进程
  3. 检查缓存和缓冲区使用
  4. 排查内存泄漏问题
  5. 检查交换分区使用

2.3 排查命令与指标分析

2.3.1 查看内存整体使用

# 查看内存使用(人类可读格式)
free -h

执行后关注指标:

  • total:总物理内存
  • used:已使用内存(> 80% 需要关注)
  • free:完全空闲的内存
  • available:可用内存(包括缓存)
  • buff/cache:缓冲区和缓存
  • Swap:交换分区使用情况(尽量不要使用)

# 查看详细内存信息
cat /proc/meminfo

执行后关注指标:

  • MemTotal:总内存
  • MemFree:空闲内存
  • MemAvailable:可用内存
  • Buffers:缓冲区
  • Cached:页缓存
  • SwapTotal:交换分区总大小
  • SwapFree:交换分区空闲
  • Slab:内核数据结构缓存

# 实时监控内存
vmstat 1

输出格式示例:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 812456  18424 234568    0    0     1     0   12   23  0  1 99  0  0

字段详解:

字段 含义 说明 单位
r 运行队列 等待 CPU 的进程数 个数
b 不可中断睡眠 正在等待 IO 的进程数 个数
swpd 交换分区使用 已使用的交换空间 KB
free 空闲内存 完全空闲的物理内存 KB
buff 缓冲区 块设备缓冲区 KB
cache 页缓存 文件系统缓存 KB
si 换入 从交换区读入内存 块/秒
so 换出 写入交换区 块/秒
bi 块读入 从块设备读入内存 块/秒
bo 块写出 写入块设备 块/秒
in 中断 每秒中断数 次数/秒
cs 上下文切换 每秒上下文切换数 次数/秒
us 用户态CPU 用户空间占用CPU百分比 %
sy 系统态CPU 内核空间占用CPU百分比 %
id 空闲CPU 空闲CPU百分比 %
wa IO等待 等待IO的CPU百分比 %
st 虚拟机窃取 被虚拟机管理器窃取的CPU %

执行后关注指标:

  1. 运行队列 r:大于 CPU 核心数说明有进程阻塞等待 CPU
  2. 不可中断睡眠 b:大于 0 说明有进程等待 IO(磁盘/网络)
  3. 交换活动 si/so:持续大于 0 说明内存严重不足,正在使用交换分区
  4. 空闲内存 free:持续下降说明内存被消耗
  5. IO 等待 wa:大于 5% 说明磁盘 IO 有瓶颈
  6. 上下文切换 cs:过高说明进程切换频繁,可能是线程过多
  7. CPU 分布 us/sy/id:us > 70% 说明用户进程繁忙,sy > 30% 说明内核繁忙

常见问题判断:

现象 可能原因
r > CPU核心数 CPU 资源不足
b > 0 IO 等待,磁盘或网络慢
si/so > 0 内存不足,使用 swap
wa > 10% 磁盘 IO 瓶颈
cs 过高 线程过多或进程切换频繁

# 查看内存统计
smem -t -k

执行后关注指标:

  • USS:进程独立占用内存
  • RSS:进程实际物理内存
  • PSS:按比例计算的共享内存
  • 找出 USS 最高的进程

2.3.2 找出内存占用最高的进程

# 按内存使用率排序,显示前 10
ps aux --sort=-%mem | head -11

执行后关注指标:

  • %MEM:内存使用率(> 50% 需关注)
  • RSS:物理内存使用(KB)
  • VSZ:虚拟内存大小
  • PIDCOMMAND:定位问题进程

# 查看进程的内存使用详情
pmap -x <PID>

执行后关注指标:

  • Address:内存地址
  • Kbytes:每段大小
  • RSS:物理内存使用
  • Dirty:脏页数量
  • total kB:总内存使用
  • 大内存块的用途(栈/堆/共享库等)

# 查看进程的 RSS 和 VSZ
ps aux | awk '{print $2, $4, $5, $11}' | sort -k3rn | head -10

执行后关注指标:

  • $4(%MEM):内存百分比
  • $5(VSZ):虚拟内存大小
  • $2(PID):进程 ID
  • $11(COMMAND):进程名

2.3.3 检查交换分区

# 查看交换分区使用
swapon -s

执行后关注指标:

  • Type:分区类型(partition/file)
  • Size:交换分区大小
  • Used:已使用大小(> 0 说明内存紧张)

# 查看交换分区详细信息
cat /proc/swaps

执行后关注指标:

  • 交换分区挂载点
  • 优先级 Priority
  • 使用量趋势

# 查看页面交换统计
vmstat 1

执行后关注指标:

  • si:每秒从交换区读入内存(page/s)
  • so:每秒写入交换区(page/s)
  • 持续 > 0 说明内存严重不足

# 查看交换使用趋势
sar -W 1 10

执行后关注指标:

  • pswpin/s:换入页面数
  • pswpout/s:换出页面数
  • 趋势变化(增加说明问题加重)

2.3.4 检查内存泄漏

# 安装内存诊断工具
# Ubuntu: sudo apt install memstat
# CentOS: sudo yum install memstat

# 使用 valgrind 检测内存泄漏(开发环境)
valgrind --leak-check=full ./your_program

执行后关注指标:

  • definitely lost:确定的内存泄漏
  • indirectly lost:间接丢失
  • possibly lost:可能的泄漏
  • still reachable:仍可访问的
  • 泄漏的字节数和块数

# 检查内核内存使用
cat /proc/slabinfo | head -20

执行后关注指标:

  • name:slab 缓存名称
  • num_objs:对象数量
  • obj_size:对象大小
  • 持续增长的 slab 可能有泄漏

# 查看 OOM 日志
dmesg | grep -i oom

执行后关注指标:

  • 被 OOM Killer 杀掉的进程
  • 被杀时的内存使用情况
  • 最后使用内存的进程
  • OOM 发生的时间点

2.3.5 清理缓存

# 清理页缓存
echo 1 > /proc/sys/vm/drop_caches

执行后关注指标:

  • 清理后 free -h 的变化
  • 可用内存是否增加
  • 应用性能是否改善

# 清理目录项和 inodes
echo 2 > /proc/sys/vm/drop_caches

执行后关注指标:

  • 目录项缓存清理效果
  • inode 缓存释放情况

# 清理所有缓存
echo 3 > /proc/sys/vm/drop_caches

执行后关注指标:

  • 综合清理效果
  • 系统性能是否受影响
  • 是否需要频繁清理

2.4 解决方案

问题类型 解决方案
应用内存泄漏 使用 valgrind 检测、修复代码
缓存占用过高 定期清理缓存、调整 vm.swappiness
交换分区频繁使用 增加物理内存、调整交换分区大小
OOM 杀手频繁触发 调整 oom_score_adj、优化应用内存使用

2.5 重要配置

# 调整 swap 策略(数值越小越不倾向使用 swap)
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p

# 调整 OOM 优先级
echo -1000 > /proc/<PID>/oom_score_adj

3. 磁盘问题排查

3.1 问题现象

  • 无法写入文件
  • 磁盘空间不足错误
  • 进程无法创建新文件
  • 系统响应缓慢

3.2 排查思路

  1. 检查磁盘空间使用
  2. 检查 inode 使用
  3. 检查文件句柄
  4. 排查大文件
  5. 检查磁盘 IO

3.3 排查命令与指标分析

3.3.1 检查磁盘空间

# 查看磁盘空间使用
df -h

执行后关注指标:

  • Size:分区总大小
  • Used:已使用空间
  • Avail:可用空间(应该 > 10%)
  • Use%:使用率(> 80% 需要关注)
  • Mounted on:挂载点
  • 哪个分区空间最紧张

# 查看 inode 使用
df -i

执行后关注指标:

  • IUsed:已使用 inode
  • IFree:空闲 inode
  • IUse%:使用率(> 80% 需要关注)
  • 是否有小文件导致 inode 耗尽

# 查看挂载点信息
mount

执行后关注指标:

  • 挂载点和设备对应关系
  • 文件系统类型(ext4/xfs等)
  • 挂载选项(ro/rw, noatime 等)
  • 是否有只读挂载的问题

# 检查磁盘分区
lsblk

执行后关注指标:

  • NAME:设备名称
  • SIZE:分区大小
  • MOUNTPOINT:挂载点
  • TYPE:设备类型(disk/part)
  • 分区结构是否合理

3.3.2 查找大文件

# 查找大于 1GB 的文件
find / -type f -size +1G 2>/dev/null

执行后关注指标:

  • 大文件的路径和名称
  • 文件大小和类型
  • 是否是临时文件或日志
  • 确认文件是否可删除

# 查找指定目录的大文件
du -sh /var/log/*

执行后关注指标:

  • 各目录占用空间
  • 日志目录是否过大
  • 是否有未轮转的日志
  • 异常增长的目录

# 按大小排序显示目录
du -h / | sort -rh | head -20

执行后关注指标:

  • 前 20 大目录
  • 目录占用空间大小
  • 空间占用趋势变化
  • 与上次检查对比差异

# 查找最近修改的大文件
find / -type f -mtime -7 -size +100M 2>/dev/null

执行后关注指标:

  • 7 天内修改的大文件
  • 是否是异常新增的文件
  • 临时文件是否未清理
  • 确认文件生成原因

3.3.3 检查 inode 使用

# 查看 inode 使用率高的目录
find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n | tail -10

执行后关注指标:

  • 文件数量最多的目录
  • 每个目录的文件数
  • 确认是否有大量小文件

# 查找目录下的文件数量
ls -la /path/to/dir | wc -l

执行后关注指标:

  • 目录下文件总数
  • 是否有异常大量文件
  • 小文件数量是否合理

# 查找空文件或小文件
find / -type f -size -1024c 2>/dev/null | head -20

执行后关注指标:

  • 空文件或极小文件
  • 是否是临时碎片文件
  • 能否清理或合并

3.3.4 检查文件句柄

# 查看系统文件句柄限制
cat /proc/sys/fs/file-max

执行后关注指标:

  • 系统最大文件句柄数
  • 是否需要调大

# 查看当前使用的文件句柄
cat /proc/sys/fs/file-nr

执行后关注指标:

  • 第一列:已分配文件句柄
  • 第二列:未使用但已分配
  • 第三列:最大文件句柄
  • 使用率 = 第一列/第三列(> 80% 需要关注)

# 查看进程打开的文件数
lsof -p <PID> | wc -l

执行后关注指标:

  • 进程打开的文件总数
  • 是否超过 ulimit 限制
  • 文件类型分布(普通文件/socket/pipe)

# 查看所有进程的文件句柄使用
lsof | wc -l

执行后关注指标:

  • 系统总打开文件数
  • 是否接近系统上限
  • 与 file-nr 对比

# 查看哪个进程打开的文件最多
lsof | awk '{print $2}' | sort | uniq -c | sort -nr | head -10

执行后关注指标:

  • 打开文件最多的进程 PID
  • 文件数量是否合理
  • 确认进程功能和业务匹配

3.3.5 检查磁盘 IO

# 安装工具
# Ubuntu: sudo apt install sysstat iotop
# CentOS: sudo yum install sysstat iotop

# 查看磁盘 IO 统计
iostat -x 1 3

输出格式示例:

Device            rMB/s      wMB/s      r/s      w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00      12.34      0.00     15.00     0.00   49360.00   6553.33     0.15    9.33    0.00    9.33   0.50   0.75

字段详解:

字段 含义 说明 单位
rMB/s 读吞吐量 每秒从设备读取的数据量 MB/s
wMB/s 写吞吐量 每秒写入设备的数据量 MB/s
r/s 读IOPS 每秒完成的读请求次数 次/秒
w/s 写IOPS 每秒完成的写请求次数 次/秒
rkB/s 读带宽 每秒读取的千字节数 KB/s
wkB/s 写带宽 每秒写入的千字节数 KB/s
avgrq-sz 平均请求大小 每次 IO 请求的平均扇区数 扇区
avgqu-sz 平均队列长度 设备队列中等待的平均请求数 个数
await 平均等待时间 从请求发出到完成的总时间 ms
r_await 读等待时间 读请求的平均等待时间 ms
w_await 写等待时间 写请求的平均等待时间 ms
svctm 平均服务时间 设备处理请求的时间(不含等待) ms
%util 设备利用率 设备繁忙的时间百分比 %

执行后关注指标:

  1. 设备利用率 %util:超过 90% 说明设备饱和,IO 请求需要排队
  2. 平均队列长度 avgqu-sz:超过 2 说明有请求积压
  3. 平均等待时间 await:超过 50ms 说明响应慢
  4. 读/写等待差异 r_await/w_await:判断读或写哪个更慢
  5. IOPS r/s + w/s:判断请求频率
  6. 吞吐量 rMB/s + wMB/s:判断数据传输量
  7. 平均请求大小 avgrq-sz:小值(< 32)表示随机IO,大值(> 128)表示顺序IO

常见问题判断:

现象 可能原因
%util > 90% 磁盘带宽饱和
await > 50ms 磁盘响应慢或队列过长
avgqu-sz > 2 IO 请求积压
w_await >> r_await 写操作慢(可能是写缓存问题)
avgrq-sz < 32 大量随机IO(数据库典型)
avgrq-sz > 128 顺序IO(文件拷贝典型)

# 实时查看磁盘 IO
iotop

执行后关注指标:

  • DISK READ:磁盘读取
  • DISK WRITE:磁盘写入
  • 高 IO 进程的 PIDCOMMAND
  • 按 F5 查看详细进程

# 查看磁盘分区状态
smartctl -a /dev/sda

执行后关注指标:

  • SMART overall-health self-assessment:健康状态
  • Reallocated_Sector_Ct:重分配扇区数
  • Raw_Read_Error_Rate:读错误率
  • 硬盘是否有硬件故障风险

3.4 解决方案

问题类型 解决方案
磁盘空间满 清理日志、删除无用文件、扩展分区
inode 满 删除大量小文件、考虑使用大文件系统
文件句柄不足 调整系统限制、优化应用
磁盘 IO 高 优化应用读写、考虑 SSD、使用 RAID

3.5 重要配置

# 调整系统文件句柄限制
echo '* soft nofile 65535' >> /etc/security/limits.conf
echo '* hard nofile 65535' >> /etc/security/limits.conf

# 调整系统级文件句柄
echo 'fs.file-max = 655350' >> /etc/sysctl.conf
sysctl -p

4. 网络问题排查

4.1 问题现象

  • 网络连接缓慢或超时
  • 无法访问外部服务
  • 丢包严重
  • 带宽使用率过高

4.2 排查思路

  1. 检查网络接口状态
  2. 检查网络连接
  3. 测试网络连通性
  4. 检查带宽使用
  5. 排查丢包问题

4.3 排查命令与指标分析

4.3.1 检查网络接口

# 查看网络接口状态
ip addr show

执行后关注指标:

  • UP:接口是否启用
  • inet:IP 地址和子网
  • BROADCAST:广播地址
  • 多个 IP 地址是否正确

# 查看网络接口统计
ip -s link

执行后关注指标:

  • RX:接收数据包数
  • TX:发送数据包数
  • errors:错误包数量(> 0 说明有问题)
  • dropped:丢弃包数(> 0 说明拥塞)
  • collisions:碰撞数(> 0 说明半双工问题)

# 查看路由表
ip route

执行后关注指标:

  • default:默认网关
  • 路由表条目是否完整
  • 网关是否可达
  • 是否有重复或错误路由

# 查看 DNS 配置
cat /etc/resolv.conf

执行后关注指标:

  • nameserver:DNS 服务器
  • search:搜索域
  • DNS 服务器是否响应
  • 是否有多个 DNS 配置

4.3.2 检查网络连接

# 查看网络连接状态
ss -tuln

执行后关注指标:

  • LISTEN:监听状态的端口
  • 确认需要的端口是否在监听
  • 端口绑定的地址(0.0.0.0 还是特定 IP)

# 查看所有网络连接
ss -tunap

执行后关注指标:

  • ESTAB:已建立连接数
  • TIME-WAIT:等待关闭的连接(过多可能说明问题)
  • Recv-Q/Send-Q:接收/发送队列(> 0 说明有积压)
  • Process:对应的进程

# 查看网络连接统计
ss -s

执行后关注指标:

  • 总连接数
  • TCP/UDP 连接分布
  • TIME-WAIT 数量(正常 < 10000)
  • 连接数变化趋势

# 查看监听端口
netstat -tlnp

执行后关注指标:

  • 监听的端口列表
  • 对应的进程名和 PID
  • 端口是否与预期一致
  • 是否有陌生端口在监听

4.3.3 测试网络连通性

# 测试连通性
ping -c 4 google.com

执行后关注指标:

  • packet loss:丢包率(应该 < 1%)
  • time:延迟时间(ms,越小越好)
  • 延迟变化是否稳定
  • 是否有超时现象

# 测试 DNS 解析
nslookup google.com

执行后关注指标:

  • 解析是否成功
  • 解析到的 IP 地址
  • 解析时间(> 1s 说明慢)
  • 使用的 DNS 服务器

dig google.com

执行后关注指标:

  • ANSWER SECTION:解析结果
  • QUERY TIME:查询时间
  • SERVER:使用的 DNS 服务器
  • 更详细的 DNS 信息

# 测试端口连通性
telnet google.com 80

执行后关注指标:

  • 是否能连接成功
  • 连接响应时间
  • 失败时的错误提示
  • 是端口未开还是网络不通

nc -zv google.com 80

执行后关注指标:

  • 连接成功/失败提示
  • 响应时间信息
  • 相比 telnet 更适合脚本使用

4.3.4 检查带宽使用

# 安装工具
# Ubuntu: sudo apt install nload iftop bmon
# CentOS: sudo yum install nload iftop bmon

# 实时查看带宽
nload

执行后关注指标:

  • Incoming:入站流量
  • Outgoing:出站流量
  • 流量曲线图
  • 瞬时值和平均值

# 查看带宽使用详情
iftop -n

执行后关注指标:

  • 流量最大的连接
  • 对方 IP 和端口
  • 上下行流量分布
  • T 切换显示单位

# 查看网络流量统计
sar -n DEV 1 5

执行后关注指标:

  • rxkB/s:接收 KB/s
  • txkB/s:发送 KB/s
  • %ifutil:接口利用率
  • 各网卡的流量分布

# 查看网卡带宽上限
ethtool eth0

执行后关注指标:

  • Speed:协商速度(1000Mb/s)
  • Duplex:双工模式(Full)
  • Link detected:连接状态
  • 是否工作在预期速率

4.3.5 排查丢包问题

# 测试丢包率
ping -c 100 google.com

执行后关注指标:

  • packet loss:丢包率(> 1% 需要关注)
  • 丢包是否随机或集中
  • 延迟变化幅度
  • 是否有规律的超时

# 查看网络错误统计
netstat -s

执行后关注指标:

  • TCP 段重传率
  • 连接失败次数
  • 报文错误数
  • 分段错误数

# 查看网卡错误
cat /proc/net/dev

执行后关注指标:

  • errors:总错误数
  • dropped:丢弃包数
  • fifo:FIFO 错误
  • frame:帧错误
  • collisions:碰撞数

# 使用 mtr 进行持续测试
mtr google.com

执行后关注指标:

  • 每跳的丢包率
  • 每跳的延迟
  • 问题出在哪个路由节点
  • 丢包的位置和程度

4.3.6 检查防火墙

# 查看 iptables 规则
iptables -L

执行后关注指标:

  • INPUTOUTPUTFORWARD 链规则
  • DROP/REJECT 规则
  • 默认策略(ACCEPT/DROP)
  • 是否有阻止正常连接的规则

# 查看 firewalld 状态(CentOS)
firewall-cmd --state

执行后关注指标:

  • firewalld 是否运行
  • 当前活跃的 zone
  • 已开放的服务/端口

firewall-cmd --list-all

执行后关注指标:

  • services:开放的服务
  • ports:开放的端口
  • interfaces:关联的网卡
  • 是否与预期一致

# 查看 ufw 状态(Ubuntu)
ufw status

执行后关注指标:

  • Status:active/inactive
  • 规则列表
  • 默认策略
  • 已允许的端口

4.4 解决方案

问题类型 解决方案
丢包 检查网络设备、更换网线、调整 MTU
带宽打满 限速、优化应用、增加带宽
DNS 解析问题 更换 DNS 服务器、检查 DNS 缓存
连接被拒绝 检查防火墙、确认服务端口

5. 系统负载过高排查

5.1 问题现象

  • 系统响应缓慢
  • uptime 显示高负载
  • 进程等待时间长
  • 应用程序响应延迟

5.2 排查思路

  1. 查看系统负载
  2. 分析负载来源(CPU、内存、IO)
  3. 检查进程状态
  4. 排查阻塞进程

5.3 排查命令与指标分析

5.3.1 查看系统负载

# 查看系统负载
uptime

执行后关注指标:

  • 三个负载值:1 分钟、5 分钟、15 分钟
  • 与 CPU 核心数比较:负载/核心 < 1 正常,> 1 有压力
  • 负载趋势是上升还是下降
  • 1分钟与15分钟的差异

# 查看详细系统状态
top

执行后关注指标:

  • load average:三个负载值
  • Cpu(s):各状态 CPU 分布
  • Mem:内存使用
  • Swap:交换分区使用
  • 运行队列长度

# 查看系统活动报告
vmstat 1 5

执行后关注指标:

  • r:运行队列(> 核心数说明阻塞)
  • b:不可中断睡眠(等待 IO)
  • si/so:交换分区活动
  • bi/bo:块设备 IO
  • us/sy/id/wa:CPU 状态分布

# 查看 CPU 统计
mpstat 1 5

执行后关注指标:

  • %usr:用户 CPU
  • %sys:系统 CPU
  • %iowait:IO 等待(> 10% 说明磁盘瓶颈)
  • %idle:空闲 CPU
  • 各指标的平均值

5.3.2 分析负载来源

# 查看系统状态摘要
iostat -xz 1 5

执行后关注指标:

  • %util:设备利用率
  • r/sw/s:IOPS
  • await:平均等待时间
  • svctm:服务时间
  • avgqu-sz:队列长度

# 查看进程状态
ps aux | awk '{print $8}' | sort | uniq -c

执行后关注指标:

  • R:运行状态数量
  • S:睡眠状态数量
  • D:不可中断睡眠(等待 IO)
  • Z:僵尸进程
  • 各状态的比例

# 查看等待 IO 的进程
iostat -d 1

执行后关注指标:

  • tps:每秒 IO 次数
  • kB_read/s:读速度
  • kB_wrtn/s:写速度
  • 哪个设备最繁忙

# 查看磁盘等待
vmstat 1 | awk '{print $16}'

执行后关注指标:

  • wa:IO 等待 CPU 占比
  • 持续 > 5% 说明磁盘瓶颈
  • 与磁盘 IO 数据对比

5.3.3 检查进程状态

# 查看运行中的进程
ps aux | grep -E 'R|D'

执行后关注指标:

  • R 状态:正在运行的进程
  • D 状态:不可中断睡眠(等待 IO)
  • 这些进程的命令和用户
  • 是否可以优化或杀死

# 查看不可中断睡眠进程(通常是等待 IO)
ps aux | grep ' D '

执行后关注指标:

  • STAT 列为 D 的进程
  • 这些进程在等待什么(磁盘/网络)
  • 持续时间是否很长
  • COMMAND 列确认进程功能

# 查看进程状态统计
ps -eo state | sort | uniq -c

执行后关注指标:

  • 各状态的数量分布
  • D 状态进程数
  • Z 状态进程数
  • 与之前对比的变化

5.3.4 检查 I/O 等待

# 查看 IO 等待时间
iostat -x 1 3

执行后关注指标:

  • %util:设备利用率(> 90% 饱和)
  • await:平均等待时间(> 50ms 慢)
  • svctm:服务时间
  • r/sw/s:IOPS

# 查看磁盘响应时间
hdparm -tT /dev/sda

执行后关注指标:

  • Timing cached reads:缓存读速度
  • Timing buffered disk reads:磁盘读速度
  • 与正常值比较是否偏低
  • 速度是否稳定

# 查看文件系统挂载选项
cat /etc/fstab

执行后关注指标:

  • relatime/noatime:减少磁盘写
  • errors=remount-ro:错误处理
  • 是否有性能相关选项
  • 挂载参数是否合理

5.4 解决方案

问题类型 解决方案
CPU 负载高 优化应用、增加 CPU 核心、负载均衡
IO 等待高 使用更快存储、优化 IO 模式、增加缓存
内存不足 增加内存、优化应用内存使用
进程阻塞 排查死锁、优化资源竞争

6. 资源限制排查

6.1 问题现象

  • 进程无法启动
  • 应用报资源不足错误
  • 无法打开新文件
  • 进程数量达到上限

6.2 排查思路

  1. 检查用户资源限制
  2. 检查系统资源限制
  3. 检查进程数量限制
  4. 检查线程数量限制

6.3 排查命令与指标分析

6.3.1 查看用户资源限制

# 查看当前用户限制
ulimit -a

执行后关注指标:

  • core file size:core 文件大小
  • open files:打开文件数(> 1024 推荐)
  • user processes:用户进程数
  • max memory size:最大内存
  • 各限制的软限制和硬限制

# 查看进程限制
cat /proc/<PID>/limits

执行后关注指标:

  • Limit:限制值
  • Soft Limit:软限制
  • Hard Limit:硬限制
  • Units:单位
  • 进程级别的具体限制值

# 查看系统级限制
cat /etc/security/limits.conf

执行后关注指标:

  • 各用户/组的配置
  • softhard
  • 限制类型(nofile/nproc)
  • 是否有全局配置

6.3.2 检查进程数量

# 查看系统进程数量限制
cat /proc/sys/kernel/pid_max

执行后关注指标:

  • 系统最大 PID 数
  • 当前进程数占比
  • 是否需要调大

# 查看当前进程数量
ps aux | wc -l

执行后关注指标:

  • 系统总进程数
  • 与 pid_max 对比
  • 是否有异常增长

# 查看用户进程数限制
ulimit -u

执行后关注指标:

  • 单用户最大进程数
  • ps aux | grep <user> | wc -l 对比
  • 是否需要调大

6.3.3 检查线程数量

# 查看线程数量限制
cat /proc/sys/kernel/threads-max

执行后关注指标:

  • 系统最大线程数
  • 是否需要调大
  • 与当前线程数对比

# 查看进程的线程数
ps -T -p <PID> | wc -l

执行后关注指标:

  • 进程拥有的线程数
  • 是否合理(Java 应用线程多正常)
  • 是否有线程泄漏

# 查看系统线程总数
ps -eLf | wc -l

执行后关注指标:

  • 系统总线程数
  • 与 threads-max 对比
  • 使用率是否过高

6.3.4 检查其他限制

# 查看信号限制
cat /proc/sys/kernel/rtprio_max

执行后关注指标:

  • 最大实时优先级
  • 是否需要调整

# 查看内存映射限制
cat /proc/sys/vm/max_map_count

执行后关注指标:

  • 最大内存映射数(Elasticsearch 等需要调大)
  • 默认值 65530,很多应用需要 262144+

# 查看管道大小限制
cat /proc/sys/fs/pipe-max-size

执行后关注指标:

  • 管道缓冲区最大值
  • 是否有应用需要更大管道

6.4 解决方案

问题类型 解决方案
文件句柄不足 调整 limits.conf、优化应用
进程数不足 调整 pid_max、优化进程管理
线程数不足 调整 threads-max、优化线程池
内存映射不足 调整 max_map_count

6.5 重要配置

# /etc/security/limits.conf 示例
*               soft    nofile          65535
*               hard    nofile          65535
*               soft    nproc           65535
*               hard    nproc           65535

# /etc/sysctl.conf 示例
fs.file-max = 655350
kernel.pid_max = 65535
kernel.threads-max = 65535
vm.max_map_count = 262144

附录:常用工具安装

Ubuntu/Debian

# 系统监控工具
sudo apt install -y sysstat htop iotop iftop nload mtr

# 网络工具
sudo apt install -y net-tools iputils-ping dnsutils

# 磁盘工具
sudo apt install -y smartmontools

# 调试工具
sudo apt install -y strace lsof valgrind

CentOS/RHEL

# 系统监控工具
sudo yum install -y sysstat htop iotop iftop nload mtr

# 网络工具
sudo yum install -y net-tools iputils bind-utils

# 磁盘工具
sudo yum install -y smartmontools

# 调试工具
sudo yum install -y strace lsof valgrind

维护记录

版本 日期 修订人 修改内容
v1.0 2026-06-02 guobin 初始版本创建
v2.0 2026-06-02 guobin 添加详细指标分析说明

维护人:guobin
创建日期:2026-06-02
版本:v2.0

原创

002-Linux系统基础排查手册-v2

本文链接: 002-Linux系统基础排查手册-v2

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录