Linux磁盘空间使用率100%解决办法

导读:本篇文章讲解 Linux磁盘空间使用率100%解决办法,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

磁盘空间使用率很高的解决办法

事情发生的原因

本人在服务器上面部署了一个java项目,项目中使用了RabbitMQ 消息中间件,项目有一个功能是,用户登录后会发一封邮件到登录用户的邮箱(这里就是使用RabbitMQ 异步完成)。为了给其他人观看项目,我就新建了一个账号,但是忘记了存储邮箱,所以发送消息后,消息发送邮件时一直报错。就导致日志文件变得无比大,后面就是磁盘满了。

方法一:删除未被进程引用的大文件、

这一类文件,就是孤立存在磁盘上的,内存中没有人使用它,删除它能直接达到回收空间的效果。

  1. 使用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
  1. 进入根目录查看文件占用情况
[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的文件。

  1. 查看文件大小 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
  1. 写入文件数据
[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
  1. 此时我们根据第一种方法进行排查删除文件
[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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!