Loading...

文章背景图

001-Linux系统基础排查手册

2026-06-02
1
-
- 分钟
|

Linux 系统基础排查手册

文档信息

  • 文档名称:Linux 系统基础排查手册
  • 版本:v1.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

# 批处理模式查看一次
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 排查思路

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

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 排查思路

  1. 检查磁盘空间使用
  2. 检查 inode 使用
  3. 检查文件句柄
  4. 排查大文件
  5. 检查磁盘 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 排查思路

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

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 排查思路

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

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 排查思路

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

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

原创

001-Linux系统基础排查手册

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

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

评论交流

文章目录