# 磁盘常用命令

df -h

## 查看各个文件占用大小
du -sh *
1
2
3
4

# iotop

## 安装
$ yum -y install iotop

## 只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效
$ iotop  -o

## 时间刷新间隔2秒,输出5次
$ iotop  -d 2 -n 5

## 非交互式,输出5次,间隔2秒,输出到屏幕,也可输出到日志文本,用于监控某时间段的io信息
$ iotop -botq -n 5 -d 2 

## 非交互式,输出pid为8382的进程信息
$ iotop -botq -p 8382
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# lsof

## 安装
$ yum install lsof
1
2


# 磁盘使用率高 排查过程

# 1. df -h 查看磁盘空间

40G的系统盘 使用了 31G,而其他机器只使用了10G左右。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   31G  6.5G  83% /
1
2
3

# 2. du -sh *

并未发现可优化空间。

$ du -sh * 
1

# 3. lsof |grep deleted

查看已删除但是并未释放空间的进程。
有很多是deleted的状态的文件,这些文件实际上还是被程序占用了,导致磁盘的空间没有释放掉,处理的办法是重启一下应用或者重启服务器即可。
生产环境服务器哪能随便重启,只能重启服务。


$ lsof |grep deleted

DBENGINE  31641 32273       netdata  998u      REG              253,1      995328     711655 /opt/netdata/var/cache/netdata/dbengine/journalfile-1-0000003609.njf (deleted)
DBENGINE  31641 32273       netdata  999u      REG              253,1    16789504     711656 /opt/netdata/var/cache/netdata/dbengine/datafile-1-0000003610.ndf (deleted)
DBENGINE  31641 32273       netdata 1000u      REG              253,1      978944     711657 /opt/netdata/var/cache/netdata/dbengine/journalfile-1-0000003610.njf (deleted)
DBENGINE  31641 32273       netdata 1001u      REG              253,1    16814080     711658 /opt/netdata/var/cache/netdata/dbengine/datafile-1-0000003611.ndf (deleted)
。。。。。
1
2
3
4
5
6
7
8

可以看到全是 PID=31641 的 netdata 进程 。

## 关闭 netdata
$ killall netdata

## 启动 netdata
$ service netdata start
1
2
3
4
5

此时再使用 df -h 查看,磁盘释放很彻底,开心。

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  5.7G   32G  16% /
1
2
更新时间: 2021-05-05 20:24:13