# 磁盘常用命令
df -h
## 查看各个文件占用大小
du -sh *
1
2
3
4
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
2
3
4
5
6
7
8
9
10
11
12
13
14
# lsof
## 安装
$ yum install lsof
1
2
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
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
2
3
4
5
6
7
8
可以看到全是 PID=31641 的 netdata 进程 。
## 关闭 netdata
$ killall netdata
## 启动 netdata
$ service netdata start
1
2
3
4
5
2
3
4
5
此时再使用 df -h 查看,磁盘释放很彻底,开心。
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 5.7G 32G 16% /
1
2
2