Linux 系统基础排查手册
文档信息
- 文档名称:Linux 系统基础排查手册
- 版本:v1.0
- 创建日期:2026-06-02
- 适用系统:Ubuntu 20.04+/CentOS 7+/RHEL 7+
- 维护人:guobin
目录
- CPU 过高排查
- 内存过高排查
- 磁盘问题排查
- 网络问题排查
- 系统负载过高排查
- 资源限制排查
1. CPU 过高排查
1.1 问题现象
- 系统响应缓慢
top 显示 CPU 使用率持续高于 80%
- 应用程序卡顿或超时
1.2 排查思路
- 识别占用 CPU 最高的进程
- 分析进程的线程级 CPU 使用
- 检查是否存在僵尸进程或死循环
- 排查定时任务或后台进程
1.3 排查命令
1.3.1 查看整体 CPU 使用
# 实时查看 CPU 使用(按 q 退出)
top
# 批处理模式查看一次
top -bn1
# 查看 CPU 统计
mpstat 1 1
# 查看每个 CPU 核心的使用情况
mpstat -P ALL 1 1
1.3.2 找出 CPU 占用最高的进程
# 按 CPU 使用率排序,显示前 10
ps aux --sort=-%cpu | head -11
# 使用 top 交互式查看(按 P 键按 CPU 排序)
top
# 查看特定进程的线程
top -H -p <PID>
# 使用 htop(更友好的界面)
htop
1.3.3 分析进程详细信息
# 查看进程的完整命令行
ps aux | grep <PID>
# 查看进程的线程信息
ps -T -p <PID>
# 查看进程的系统调用(需要 root)
strace -p <PID> -c
# 查看进程的内存映射
pmap <PID>
# 查看进程的文件描述符
lsof -p <PID>
1.3.4 检查僵尸进程
# 查找僵尸进程
ps aux | grep Z
# 统计僵尸进程数量
ps aux | grep -c Z
# 强制杀死僵尸进程(需要父进程 PID)
kill -9 <父进程PID>
1.3.5 检查定时任务
# 查看当前用户的 cron 任务
crontab -l
# 查看系统 cron 任务
ls -la /etc/cron.*
# 查看 anacron 任务
cat /etc/anacrontab
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
# 查看详细内存信息
cat /proc/meminfo
# 实时监控内存
vmstat 1
# 查看内存统计
smem -t -k
2.3.2 找出内存占用最高的进程
# 按内存使用率排序,显示前 10
ps aux --sort=-%mem | head -11
# 查看进程的内存使用详情
pmap -x <PID>
# 查看进程的 RSS 和 VSZ
ps aux | awk '{print $2, $4, $5, $11}' | sort -k3rn | head -10
2.3.3 检查交换分区
# 查看交换分区使用
swapon -s
# 查看交换分区详细信息
cat /proc/swaps
# 查看页面交换统计
vmstat 1
# 查看交换使用趋势
sar -W 1 10
2.3.4 检查内存泄漏
# 安装内存诊断工具
# Ubuntu: sudo apt install memstat
# CentOS: sudo yum install memstat
# 使用 valgrind 检测内存泄漏(开发环境)
valgrind --leak-check=full ./your_program
# 检查内核内存使用
cat /proc/slabinfo | head -20
# 查看 OOM 日志
dmesg | grep -i oom
2.3.5 清理缓存
# 清理页缓存
echo 1 > /proc/sys/vm/drop_caches
# 清理目录项和 inodes
echo 2 > /proc/sys/vm/drop_caches
# 清理所有缓存
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
# 查看 inode 使用
df -i
# 查看挂载点信息
mount
# 检查磁盘分区
lsblk
3.3.2 查找大文件
# 查找大于 1GB 的文件
find / -type f -size +1G 2>/dev/null
# 查找指定目录的大文件
du -sh /var/log/*
# 按大小排序显示目录
du -h / | sort -rh | head -20
# 查找最近修改的大文件
find / -type f -mtime -7 -size +100M 2>/dev/null
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
# 查看进程打开的文件数
lsof -p <PID> | wc -l
# 查看所有进程的文件句柄使用
lsof | wc -l
# 查看哪个进程打开的文件最多
lsof | awk '{print $2}' | sort | uniq -c | sort -nr | head -10
3.3.5 检查磁盘 IO
# 安装工具
# Ubuntu: sudo apt install sysstat iotop
# CentOS: sudo yum install sysstat iotop
# 查看磁盘 IO 统计
iostat -x 1 3
# 实时查看磁盘 IO
iotop
# 查看磁盘分区状态
smartctl -a /dev/sda
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
# 查看网络接口统计
ip -s link
# 查看路由表
ip route
# 查看 DNS 配置
cat /etc/resolv.conf
4.3.2 检查网络连接
# 查看网络连接状态
ss -tuln
# 查看所有网络连接
ss -tunap
# 查看网络连接统计
ss -s
# 查看监听端口
netstat -tlnp
4.3.3 测试网络连通性
# 测试连通性
ping -c 4 google.com
# 测试 DNS 解析
nslookup google.com
dig google.com
# 测试端口连通性
telnet google.com 80
nc -zv google.com 80
4.3.4 检查带宽使用
# 安装工具
# Ubuntu: sudo apt install nload iftop bmon
# CentOS: sudo yum install nload iftop bmon
# 实时查看带宽
nload
# 查看带宽使用详情
iftop -n
# 查看网络流量统计
sar -n DEV 1 5
# 查看网卡带宽上限
ethtool eth0
4.3.5 排查丢包问题
# 测试丢包率
ping -c 100 google.com
# 查看网络错误统计
netstat -s
# 查看网卡错误
cat /proc/net/dev
# 使用 mtr 进行持续测试
mtr google.com
4.3.6 检查防火墙
# 查看 iptables 规则
iptables -L
# 查看 firewalld 状态(CentOS)
firewall-cmd --state
firewall-cmd --list-all
# 查看 ufw 状态(Ubuntu)
ufw status
4.4 解决方案
| 问题类型 |
解决方案 |
| 丢包 |
检查网络设备、更换网线、调整 MTU |
| 带宽打满 |
限速、优化应用、增加带宽 |
| DNS 解析问题 |
更换 DNS 服务器、检查 DNS 缓存 |
| 连接被拒绝 |
检查防火墙、确认服务端口 |
5. 系统负载过高排查
5.1 问题现象
- 系统响应缓慢
uptime 显示高负载
- 进程等待时间长
- 应用程序响应延迟
5.2 排查思路
- 查看系统负载
- 分析负载来源(CPU、内存、IO)
- 检查进程状态
- 排查阻塞进程
5.3 排查命令
5.3.1 查看系统负载
# 查看系统负载
uptime
# 查看详细系统状态
top
# 查看系统活动报告
vmstat 1 5
# 查看 CPU 统计
mpstat 1 5
5.3.2 分析负载来源
# 查看系统状态摘要
iostat -xz 1 5
# 查看进程状态
ps aux | awk '{print $8}' | sort | uniq -c
# 查看等待 IO 的进程
iostat -d 1
# 查看磁盘等待
vmstat 1 | awk '{print $16}'
5.3.3 检查进程状态
# 查看运行中的进程
ps aux | grep -E 'R|D'
# 查看不可中断睡眠进程(通常是等待 IO)
ps aux | grep ' D '
# 查看进程状态统计
ps -eo state | sort | uniq -c
5.3.4 检查 I/O 等待
# 查看 IO 等待时间
iostat -x 1 3
# 查看磁盘响应时间
hdparm -tT /dev/sda
# 查看文件系统挂载选项
cat /etc/fstab
5.4 解决方案
| 问题类型 |
解决方案 |
| CPU 负载高 |
优化应用、增加 CPU 核心、负载均衡 |
| IO 等待高 |
使用更快存储、优化 IO 模式、增加缓存 |
| 内存不足 |
增加内存、优化应用内存使用 |
| 进程阻塞 |
排查死锁、优化资源竞争 |
6. 资源限制排查
6.1 问题现象
- 进程无法启动
- 应用报资源不足错误
- 无法打开新文件
- 进程数量达到上限
6.2 排查思路
- 检查用户资源限制
- 检查系统资源限制
- 检查进程数量限制
- 检查线程数量限制
6.3 排查命令
6.3.1 查看用户资源限制
# 查看当前用户限制
ulimit -a
# 查看进程限制
cat /proc/<PID>/limits
# 查看系统级限制
cat /etc/security/limits.conf
6.3.2 检查进程数量
# 查看系统进程数量限制
cat /proc/sys/kernel/pid_max
# 查看当前进程数量
ps aux | wc -l
# 查看用户进程数限制
ulimit -u
6.3.3 检查线程数量
# 查看线程数量限制
cat /proc/sys/kernel/threads-max
# 查看进程的线程数
ps -T -p <PID> | wc -l
# 查看系统线程总数
ps -eLf | wc -l
6.3.4 检查其他限制
# 查看信号限制
cat /proc/sys/kernel/rtprio_max
# 查看内存映射限制
cat /proc/sys/vm/max_map_count
# 查看管道大小限制
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 |
初始版本创建 |
维护人:guobin
创建日期:2026-06-02
版本:v1.0