背景:
当程序报警no space left时,如下图。
原因是因为磁盘空间不够了,没办法继续写入日志或者其他写入操作,导致无法运行。
通常的操作如下:
1.df -h 查看一下是那个磁盘不够用了,比如:
#这里我发现,我的/目录已经被占用满了
[root@ecs-69298068-001 ~/sh]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 99G 99G 0G 100% /
2.到/目录下,可以使用命令du -sh *,查看具体是哪个文件件,占用空间太大:
[root@ecs-69298068-001 /]# du -sh *
0 bin
141M boot
0 dev
80K dump.rdb
48M etc
4.0K home
0 lib
0 lib64
16K lost+found
4.0K media
4.0K mnt
4.0G opt
4.0K optdata
du: cannot access 'proc/14257/task/14257/fd/3': No such file or directory
du: cannot access 'proc/14257/task/14257/fdinfo/3': No such file or directory
du: cannot access 'proc/14257/fd/3': No such file or directory
du: cannot access 'proc/14257/fdinfo/3': No such file or directory
0 proc
100K res
1.7G root
640K run
0 sbin
4.0K srv
0 sys
175M titan
1.4M tmp
3.1G usr
9.2G var
正常情况下,一步一步找到对应的目录,清理文件就对了,但是,我这里发生一个异常
明明各个空间的占用都不大,但是却显示/目录已经被使用完毕了。
这是由于服务器存在删除但未释放的文件!
举例:当我发现一个日志文件比较大的时候,我直接通过命令rm -rf删除它,执行之后,在控制台就看不见了,但是实际上因为程序还在执行,该文件还存在。
解决办法:执行lsof +L1 | grep '(deleted)' 命令,找到理应被删除的文件
[root@ecs-69298068-001 /]# lsof +L1 | grep '(deleted)'
systemd-j 1780 root txt REG 8,1 346280 0 401754 /usr/lib/systemd/systemd-journald;672c5865 (deleted)
dbus-daem 3436 dbus txt REG 8,1 223320 0 396200 /usr/bin/dbus-daemon;672c5865 (deleted)
systemd-l 3450 root txt REG 8,1 635848 0 401756 /usr/lib/systemd/systemd-logind;672c5865 (deleted)
dhclient 3747 root txt REG 8,1 424352 0 398227 /usr/sbin/dhclient;672c5865 (deleted)
dhclient 3846 root txt REG 8,1 424352 0 398227 /usr/sbin/dhclient;672c5865 (deleted)
agetty 4229 root txt REG 8,1 36936 0 401234 /usr/sbin/agetty;672c5865 (deleted)
agetty 4231 root txt REG 8,1 36936 0 401234 /usr/sbin/agetty;672c5865 (deleted)
mysqld 8498 mysql 5u REG 8,1 0 0 526455 /tmp/ibuyzlie (deleted)
mysqld 8498 mysql 6u REG 8,1 0 0 526457 /tmp/ibgnETXr (deleted)
mysqld 8498 mysql 7u REG 8,1 0 0 526458 /tmp/ibaJ3rDF (deleted)
mysqld 8498 mysql 8u REG 8,1 0 0 526459 /tmp/ib0l1M06 (deleted)
mysqld 8498 mysql 12u REG 8,1 0 0 526460 /tmp/ibMay7Lk (deleted)
top 27154 root 0u CHR 136,1 0t0 0 4 /dev/pts/1 (deleted)
top 27154 root 1u CHR 136,1 0t0 0 4 /dev/pts/1 (deleted)
top 27154 root 3u CHR 136,1 0t0 0 4 /dev/pts/1 (deleted)
java 30521 root 108w REG 8,1 67108880 0 789660 /tmp/zookeeper/version-2/log.1 (deleted)
java 30868 root 107uW REG 8,1 0 0 789662 /tmp/kafka-logs/.lock (deleted)
每一列对应的是:COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAM
第7列SIZE/OFF是显示文件大小的,第二列的PID。
找到异常的文件,关闭对应的程序,kill -9 PID,然后重启即可。