欢迎光临
我们一直在努力

Linux 性能诊断三剑客:df、du、top 命令详解

Linux 性能诊断三剑客:df、du、top 命令详解

前言

在 Linux 系统运维中,最常见的故障莫过于磁盘满了和系统变慢了。面对这些问题,有三个命令是每个运维人员必须掌握的:df、du 和 top。

本文将详细讲解这三个命令的使用方法、常见场景和实战技巧,帮助你快速定位系统问题。

📌 适用人群:Linux 初学者、运维工程师、开发人员
📌 系统环境:CentOS 7/8、Ubuntu 18.04+、Debian 10+


一、df – 查看磁盘整体使用情况

1.1 命令作用

df(Disk Free)用于查看文件系统级别的磁盘空间使用情况,告诉你整个分区还剩多少空间。

1.2 常用参数

参数含义说明
-h human-readable 以 GB/MB 格式显示,最常用
-T type 显示文件系统类型(ext4/xfs/ntfs)
-i inodes 显示 inode 使用情况(文件数量)
-t type 只显示指定类型的文件系统

1.3 基础用法

# 最常用:查看所有挂载点
df -h

# 查看指定目录所在分区
df -h /home

# 查看文件系统类型
df -Th

# 查看 inode 使用情况(防止小文件耗尽)
df -i

1.4 输出解读

bash

$ df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda1 ext4 98G 45G 48G 49% /
/dev/sdb1 xfs 500G 420G 80G 84% /data
tmpfs tmpfs 2G 1M 2G 1% /dev/shm

字段含义告警阈值
已用% 空间使用率 >85% 告警,>95% 紧急
挂载点 目录路径 根目录 / 满了最危险
类型 文件系统 tmpfs 是内存盘,重启消失

1.5 常见故障场景

场景一:磁盘写满报错

bash

# 报错信息
No space left on device

# 排查步骤
df -h # 查看哪个分区满了
df -i # 如果空间没满,检查 inode

场景二:inode 耗尽

bash

# inode 满会导致无法创建新文件(即使磁盘还有空间)
df -i
# 输出示例:IUsed% 显示 100% 表示 inode 耗尽

# 通常是因为小文件太多,常见于邮件服务器、缓存目录

1.6 实用技巧

bash

# 只看根分区和 /data 分区
df -Th / /data

# 排除 tmpfs 等临时文件系统
df -Th -x tmpfs -x devtmpfs

# 输出 JSON 格式(便于脚本处理)
df -h –output=source,target,used,size,pcent | jq -R -s -c 'split("\\n")'


二、du – 查看目录/文件占用详情

2.1 命令作用

du(Disk Usage)用于目录级别的磁盘分析,帮你找出哪个目录或文件占用了大量空间。

2.2 常用参数

参数含义说明
-h human-readable 人类可读格式
-s summarize 只显示总计,不展开子目录
-c total 最后一行显示总和
-d N max depth 显示 N 层子目录
-a all 显示文件(不只是目录)

2.3 基础用法

bash

# 查看当前目录所有子目录大小
du -sh *

# 查看指定目录大小
du -sh /var/log

# 显示详细列表并排序
du -sh * | sort -rh

# 显示两层目录深度
du -h -d 2 /home

# 显示所有文件的大小(包括普通文件)
du -ah /var/log | head -20

2.4 输出解读

bash

$ du -csh *
1.2G logs
450M mysql_data
2.3G app
8.5M config
3.8G total

字段含义
1.2G 该目录总大小
logs 目录/文件名
total 所有项目总和(由 -c 参数控制)

2.5 实战:清理磁盘空间

bash

# 步骤1:找到最大的目录
cd /
sudo du -sh /* –exclude=/proc –exclude=/sys 2>/dev/null | sort -rh | head -10

# 步骤2:进入可疑目录继续深入
cd /var
sudo du -sh * | sort -rh | head -10

# 步骤3:发现 /var/log 太大,查看日志文件
cd /var/log
sudo du -sh * | sort -rh

# 步骤4:清理或轮转日志
sudo truncate -s 0 /var/log/syslog # 清空文件(不删除)
sudo journalctl –vacuum-size=500M # 清理 systemd 日志

2.6 实用技巧

bash

# 找出所有大于 100MB 的文件
find / -type f -size +100M 2>/dev/null

# 找出所有大于 1GB 的文件并排序
find / -type f -size +1G -exec du -h {} \\; 2>/dev/null | sort -rh

# 排除某些目录进行统计
du -sh –exclude=/proc –exclude=/sys /

# 显示磁盘占用排名前 10 的目录
sudo du -a / 2>/dev/null | sort -nr | head -10

2.7 ⚠️ 常见陷阱

现象:df 显示磁盘满了,但 du 统计不到那么多空间

原因:某个文件已被删除,但仍有进程在占用

解决方法:

bash

# 查找被删除但仍被占用的文件
lsof | grep deleted

# 重启相关进程释放空间
systemctl restart <service_name>
# 或重启服务器


三、top – 实时监控系统性能

3.1 命令作用

top 是 Linux 的任务管理器,实时显示 CPU、内存、Swap 使用情况,以及所有进程的资源占用。

3.2 界面布局

text

top – 10:30:15 up 5 days, 2 users, load average: 0.50, 0.33, 0.13
Tasks: 245 total, 2 running, 243 sleeping, 0 stopped, 0 zombie
%Cpu(s): 15.2 us, 3.1 sy, 0.0 ni, 80.1 id, 1.5 wa, 0.1 hi, 0.0 si
MiB Mem : 15982.4 total, 2345.6 free, 8234.2 used, 5402.6 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 6452.3 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12345 root 20 0 2.1g 450m 52m S 15.0 2.8 2:30.21 mysqld

3.3 交互式快捷键

在 top 界面中按下以下按键:

按键作用说明
1 展开/合并 CPU 核心 查看每个核心使用率
P 按 CPU 排序 大写 P,找到 CPU 大户
M 按内存排序 大写 M,找到内存大户
T 按运行时间排序 大写 T
c 显示完整命令 查看进程的完整命令行
k 杀死进程 输入 PID 和信号(15/9)
q 退出 或者按 Ctrl+C

3.4 关键指标解读

Load Average(平均负载)

text

load average: 0.50, 0.33, 0.13
| | |
1分钟 5分钟 15分钟

核心数Load < 核心数Load = 核心数Load > 核心数×2
4核 ✅ 正常 ⚠️ 满载 🔴 过载
8核 ✅ 正常 ⚠️ 满载 🔴 过载
CPU 指标
字段全称含义告警阈值
us user 用户进程占用 >70% 过高
sy system 内核占用 >20% 异常
id idle 空闲 越低越忙
wa iowait 等待磁盘 I/O >20% 磁盘瓶颈
st steal 被虚拟化偷走 >10% 宿主机超卖
内存指标
字段含义告警说明
total 总内存
free 完全空闲 太低说明内存紧张
avail Mem 可用内存 最重要,接近 0 告警
Swap used 交换分区使用 >0 说明内存不足

3.5 实战排查

场景一:CPU 过高

bash

# 1. 打开 top,按 1 展开 CPU 核心
top

# 2. 按 P 按 CPU 排序
# 3. 找到 CPU 占用高的 PID
# 4. 按 c 查看完整命令

# 进一步分析
strace -p <PID> -c # 统计系统调用
lsof -p <PID> # 查看打开的文件

场景二:内存不足

bash

# 1. 在 top 中按 M 按内存排序
# 2. 查看 avail Mem 是否接近 0
# 3. 检查 Swap used 是否大于 0

# 查看详细内存占用
smem -r # 查看 PSS 真实内存占用

场景三:磁盘 I/O 瓶颈

bash

# 在 top 中看 wa 字段
# 如果 wa > 20%,说明磁盘慢

# 进一步确认
iostat -x 1
# 查看 %util 是否接近 100%,await 是否超过 50ms

3.6 非交互模式(脚本友好)

bash

# 输出一次 top 结果(适合定时采集)
top -bn1 | head -20

# 指定进程监控
top -p 1234

# 以批处理模式输出
top -b -d 2 -n 5 > top_output.txt


四、三剑客配合实战

4.1 完整排查流程

text

系统报警:磁盘空间不足


df -Th ← 确认哪个分区满了


cd /full_partition
du -sh * | sort -rh ← 找到最大的目录


cd big_directory
du -sh * | sort -rh ← 逐层深入


发现是日志/缓存文件

┌───┴───┐
│ │
清理 排查为什么异常增长


top -P ← 找 CPU 高的进程
top -M ← 找内存高的进程

4.2 健康检查脚本

bash

#!/bin/bash
# 系统健康快照脚本

echo "========== 磁盘空间 =========="
df -Th | grep -v tmpfs

echo "========== 根目录大文件 Top 5 =========="
sudo du -sh /* –exclude=/proc –exclude=/sys 2>/dev/null | sort -rh | head -5

echo "========== 系统负载 =========="
top -bn1 | head -5

echo "========== 内存状态 =========="
free -h

echo "========== 磁盘 I/O =========="
iostat -x 1 2 | tail -20

4.3 告警阈值参考

指标告警阈值紧急阈值
磁盘使用率 > 85% > 95%
inode 使用率 > 85% > 95%
Load/核 > 0.7 > 1.5
CPU wa > 10% > 20%
可用内存 < 20% < 10%
Swap used > 0 > 500MB

五、总结速查表

命令一句话作用最常用写法典型场景
df 看分区还剩多少空间 df -Th 磁盘满报警
du 看哪个目录占空间多 `du -sh * sort -rh`
top 看哪个进程在消耗资源 top 然后按 P 或 M 系统变慢

记忆口诀:

  • disk free = 盘剩多少
  • disk usage = 谁占了盘
  • top = 谁吃了资源
  • du -csh * –exclude=“home”
赞(0)
未经允许不得转载:171主机测评 » Linux 性能诊断三剑客:df、du、top 命令详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址