Linux 系统基础排查手册
文档信息
- 文档名称:Linux 系统基础排查手册
- 版本:v2.0
- 创建日期:2026-06-02
- 适用系统:Ubuntu 20.04+/CentOS 7+/RHEL 7+
- 维护人:guobin
目录
1. CPU 过高排查
1.1 问题现象
- 系统响应缓慢
top显示 CPU 使用率持续高于 80%- 应用程序卡顿或超时
1.2 排查思路
- 识别占用 CPU 最高的进程
- 分析进程的线程级 CPU 使用
- 检查是否存在僵尸进程或死循环
- 排查定时任务或后台进程
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列(确认是否内存也高)PID和COMMAND(定位问题进程)USER列(确认是哪个用户的进程)
# 使用 top 交互式查看(按 P 键按 CPU 排序)
top
执行后关注指标:
- 按
P键按 CPU 排序 - 观察进程 CPU 变化趋势
- 按
H键显示线程级信息 TIME+列查看 CPU 累计使用时间
# 查看特定进程的线程
top -H -p <PID>
执行后关注指标:
%CPU列找出占用最高的线程LWP列是线程 IDCOMMAND列查看线程名- 确认是单线程还是多线程问题
# 使用 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 |
文件描述符 | 文件描述符编号或类型(如 cwd、txt、mem、DEL、0r、1w、2w) |
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 |
执行后关注指标:
- 文件描述符总数:执行
lsof -p <PID> | wc -l统计,超过 1024 需关注 - DEL 类型文件:
lsof -p <PID> | grep DEL,表示已删除但未释放的文件,可能导致磁盘空间不释放 - 网络连接数:
lsof -p <PID> | grep -E 'IPv4|IPv6' | wc -l,检查是否有过多连接 - TIME_WAIT 状态:网络连接是否有大量 TIME_WAIT
- socket 连接:查看 NAME 列的远程地址和端口
- 未关闭的日志文件:检查是否有大量打开的日志文件
- 共享库数量:
lsof -p <PID> | grep mem | wc -l,是否加载过多库 - 标准输出/错误:检查 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 排查思路
- 查看内存整体使用情况
- 识别占用内存最高的进程
- 检查缓存和缓冲区使用
- 排查内存泄漏问题
- 检查交换分区使用
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 | % |
执行后关注指标:
- 运行队列
r:大于 CPU 核心数说明有进程阻塞等待 CPU - 不可中断睡眠
b:大于 0 说明有进程等待 IO(磁盘/网络) - 交换活动
si/so:持续大于 0 说明内存严重不足,正在使用交换分区 - 空闲内存
free:持续下降说明内存被消耗 - IO 等待
wa:大于 5% 说明磁盘 IO 有瓶颈 - 上下文切换
cs:过高说明进程切换频繁,可能是线程过多 - 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:虚拟内存大小PID和COMMAND:定位问题进程
# 查看进程的内存使用详情
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 排查思路
- 检查磁盘空间使用
- 检查 inode 使用
- 检查文件句柄
- 排查大文件
- 检查磁盘 IO
3.3 排查命令与指标分析
3.3.1 检查磁盘空间
# 查看磁盘空间使用
df -h
执行后关注指标:
Size:分区总大小Used:已使用空间Avail:可用空间(应该 > 10%)Use%:使用率(> 80% 需要关注)Mounted on:挂载点- 哪个分区空间最紧张
# 查看 inode 使用
df -i
执行后关注指标:
IUsed:已使用 inodeIFree:空闲 inodeIUse%:使用率(> 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 |
设备利用率 | 设备繁忙的时间百分比 | % |
执行后关注指标:
- 设备利用率
%util:超过 90% 说明设备饱和,IO 请求需要排队 - 平均队列长度
avgqu-sz:超过 2 说明有请求积压 - 平均等待时间
await:超过 50ms 说明响应慢 - 读/写等待差异
r_await/w_await:判断读或写哪个更慢 - IOPS
r/s+w/s:判断请求频率 - 吞吐量
rMB/s+wMB/s:判断数据传输量 - 平均请求大小
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 进程的
PID和COMMAND - 按 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 排查思路
- 检查网络接口状态
- 检查网络连接
- 测试网络连通性
- 检查带宽使用
- 排查丢包问题
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/stxkB/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
执行后关注指标:
INPUT、OUTPUT、FORWARD链规则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 排查思路
- 查看系统负载
- 分析负载来源(CPU、内存、IO)
- 检查进程状态
- 排查阻塞进程
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:块设备 IOus/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/s、w/s:IOPSawait:平均等待时间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/s、w/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 排查思路
- 检查用户资源限制
- 检查系统资源限制
- 检查进程数量限制
- 检查线程数量限制
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
执行后关注指标:
- 各用户/组的配置
soft和hard值- 限制类型(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