Linux 性能诊断三剑客:df、du、top 命令详解
2026/6/9 1:05:31 网站建设 项目流程

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

前言

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

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

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


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

1.1 命令作用

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

1.2 常用参数

参数含义说明
-hhuman-readable以 GB/MB 格式显示,最常用
-Ttype显示文件系统类型(ext4/xfs/ntfs)
-iinodes显示 inode 使用情况(文件数量)
-ttype只显示指定类型的文件系统

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 常用参数

参数含义说明
-hhuman-readable人类可读格式
-ssummarize只显示总计,不展开子目录
-ctotal最后一行显示总和
-d Nmax depth显示 N 层子目录
-aall显示文件(不只是目录)

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 指标
字段全称含义告警阈值
ususer用户进程占用>70% 过高
sysystem内核占用>20% 异常
ididle空闲越低越忙
waiowait等待磁盘 I/O>20% 磁盘瓶颈
ststeal被虚拟化偷走>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然后按PM系统变慢

记忆口诀

  • diskfree = 盘剩多少
  • diskusage = 谁占了盘
  • top= 谁吃了资源
  • du -csh * --exclude=“home”

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询