Linux磁盘空间使用率100%解决办法
磁盘空间使用率很高的解决办法
事情发生的原因
本人在服务器上面部署了一个java项目,项目中使用了RabbitMQ 消息中间件,项目有一个功能是,用户登录后会发一封邮件到登录用户的邮箱(这里就是使用RabbitMQ 异步完成)。为了给其他人观看项目,我就新建了一个账号,但是忘记了存储邮箱,所以发送消息后,消息发送邮件时一直报错。就导致日志文件变得无比大,后面就是磁盘满了。
方法一:删除未被进程引用的大文件、
这一类文件,就是孤立存在磁盘上的,内存中没有人使用它,删除它能直接达到回收空间的效果。
- 使用df命令可以看到 Use 列 就是磁盘使用得百分比。可以看见文件系统/dev/vda1 已经
[root@VM-0-9-centos: test]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 50G 0 100% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 920M 24K 920M 1% /dev/shm
tmpfs 920M 48M 872M 6% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/0
- 进入根目录查看文件占用情况
[root@VM-0-9-centos: /]#du -sh * | grep G
1.2G apps
du: cannot access ‘proc/9507/task/9507/fd/4’: No such file or directory
du: cannot access ‘proc/9507/task/9507/fdinfo/4’: No such file or directory
du: cannot access ‘proc/9507/fd/4’: No such file or directory
du: cannot access ‘proc/9507/fdinfo/4’: No such file or directory
3.5G project
34G root
8.8G usr
1.8G var
可以看到,在root目录下有34G的文件,我们进入root目录,重复执行上面的命令找到大文件:
[root@VM-0-9-centos: ~]#du -sh *
9.8G a.txt
4.0K deployJD.sh
469M mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
1016K nginx-1.18.0.tar.gz
4.0K null
85M otp_src_23.0.tar.gz
15M rabbitmq-server-generic-unix-3.8.5.tar.xz
2.2M redis-6.0.6.tar.gz
24G test
4.0K test.sh
找到大文件后,将其删除
[root@VM-0-9-centos: ~]#rm -rf a.txt
[root@VM-0-9-centos: ~]#rm -rf test
再次执行 df -h 查看磁盘使用量
[root@VM-0-9-centos: ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 16G 31G 35% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 920M 24K 920M 1% /dev/shm
tmpfs 920M 48M 872M 6% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/0
注意:这里删除的两个文件,在进程中是没有被引用的,所以删除后就能直接看到效果。
还有一种情况,就是需要删除的文件已经被进程引用了(例如:项目引用的日志文件),这时删除文件后,使用df -h发现和删除前一样。
方法二:删除被磁盘引用的大文件
被内存引用的文件,即使磁盘上被删除了,但是在内存中还在使用(未删除完成)。
这里我使用的是启动一个web项目,然后往日志文件中写入数据,使其变成一个几十G的文件。
- 查看文件大小 4.9k
[root@VM-0-9-centos: jd]#ll -h springboot.log
-rw-r--r-- 1 root root 4.9K Aug 21 20:27 springboot.log
- 写入文件数据
[root@VM-0-9-centos: jd]#dd if=/dev/zero of=./springboot.log bs=1024k count=102400
dd: error writing ‘./springboot.log’: No space left on device
33965+0 records in
33964+0 records out
35614191616 bytes (36 GB) copied, 315.715 s, 113 MB/s
[root@VM-0-9-centos: jd]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 50G 0 100% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 920M 24K 920M 1% /dev/shm
tmpfs 920M 48M 872M 6% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/0
- 此时我们根据第一种方法进行排查删除文件
[root@VM-0-9-centos: jd]#cd /
[root@VM-0-9-centos: /]#du -sh * | grep G
1.2G apps
du: cannot access ‘proc/13650/task/13650/fd/4’: No such file or directory
du: cannot access ‘proc/13650/task/13650/fdinfo/4’: No such file or directory
du: cannot access ‘proc/13650/fd/4’: No such file or directory
du: cannot access ‘proc/13650/fdinfo/4’: No such file or directory
37G project
8.8G usr
1.8G var
[root@VM-0-9-centos: /]#cd /project/jd
[root@VM-0-9-centos: jd]#ll -h springboot.log
-rw-r--r-- 1 root root 34G Aug 21 20:38 springboot.log
[root@VM-0-9-centos: jd]#rm -rf springboot.log
[root@VM-0-9-centos: jd]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 50G 0 100% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 920M 24K 920M 1% /dev/shm
tmpfs 920M 8.7M 911M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/
可以看到删除文件后 df -h命令查询出来还是没变,下面是解决方法:
查找上面删除的文件,被引用的PID,然后kill掉进程
[root@VM-0-9-centos: jd]#lsof | grep deleted
...
...
java 10615 root 1w REG 253,1 35614191616 1442201 /project/jd/springboot.log (deleted)
java 10615 root 2w REG 253,1 35614191616 1442201 /project/jd/springboot.log (deleted)
java 10615 10616 root 1w REG 253,1 35614191616 1442201 /project/jd/springboot.log (deleted)
java 10615 10616 root 2w REG 253,1 35614191616 1442201 /project/jd/springboot.log (deleted)
java 10615 10617 root 1w REG 253,1 35614191616 1442201 /project/jd/springboot.log (deleted)
...
杀掉指定的进程,然后再查看磁盘使用率,发现磁盘空间已经回收成功。
[root@VM-0-9-centos: jd]#kill -9 10615
[root@VM-0-9-centos: jd]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 16G 31G 35% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 920M 24K 920M 1% /dev/shm
tmpfs 920M 8.7M 911M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/0
[1]+ Killed nohup java -Dloader.path="lib/" -jar myproject-0.0.1-SNAPSHOT.jar > springboot.log 2>&1
总结
做个笔记
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/78298.html