服务器磁盘占用过高问题解决

服务器磁盘占用过高问题解决,第1张

背景

最近一直收到产品环境其中一台server的磁盘占用超过90%的警告,之前为了解决这个问题编写了一个压缩和删除历史log的脚本,正常情况来说应该不会再报这个警告,因为脚本是每天都在跑,所以每天增长的log的大小应该不至于占用很多的磁盘空间,但是实际情况却是每隔两三天就会收到一次警告,然后不得不手动的清理一些还没有被脚本压缩以及删除的log,从而释放一些空间,但是这不是长久之计,所以就详细的去查了这个问题。

解决

再次受到这个警告之后,我通过SSH连到了这台机器,然后通过df -h的命令查看了一下各个挂载磁盘的使用率如下图:

从图中可以看到可以看到 /dev/xvdb1这个磁盘被挂载在/alidata1/这个目录下,并且已经使用了34G(90%).

然后就要查看/alidata1下到底是哪个文件或者文件夹占用了这么多的磁盘空间,我们通过du -h --max-depth=1来查看,如下图:

我们可以看到 /alidata1下的所有文件及文件夹占用的空间是22G,和我们通过df -h查看出来的磁盘占用34G相差12G,这是为什么?这12G的空间到底是被谁占用了?

于是去网上查了一些资料,原来是因为在Linux上删除一个进程正在写入的文件的时候,虽然已经被我们删除了,但是只要进程还在,那个文件就不会真正被删除,只是被临时存放到系统的某个地方,有点类似于Windows的回收站。通过lsof可以查看没有被真正删除的文件。如下图

从图中我们可以看出有四个占用空间比较大的没有被真正删除的文件,这四个文件分别是809和808的java进程console的输出log。之前被手动删除,但是由于没有重启进程导致文件一直还在,占用了大量空间。在通过重启808和809的java进程之后,磁盘的警告恢复了,通过df和du查看的结果如下:

df -h

从新的结果中可以看到df查看的磁盘占用空间和du查看的文件中下文件的占用空间一致了。

总结

所以如果以后碰到一些不合理的一些磁盘占用情况,我们可以通过df和du来查看磁盘占用空间和实际的文件占用空间是否有差异,如果有差异通过lsof命令查看有哪些没有被真正删除的文件,确认是被哪个进程占用,通过重启进程的方式来释放这些空间。

首先必须使用 ssh 工具连接服务器,在 windows 环境下推荐使用: SecureCRT

使用下面命令进行登录:

链接之后会提示输入密码,密码不可见,使用键盘输入完之后直接按回车。

如上图,存放项目的磁盘空间占用率为 40% ,项目存放路径为 /home

并不是所有的总空间都可以存放文件,所以已使用空间未达到484G 的之前占用率将会达到100%,观察空间是否爆满,主要以占用率为参考。

使用命令到达项目所在目录:

接着,使用命令到达项目备份目录:

之后,使用命令查看备份文件:

使用命令查看备份文件大小:

可以看到备份文件有大和小两种, 删除的时候请留下时间最近一次大备份

使用以下命令进行文件删除:

这个命令非常之危险,没有任何挽救的余地

一般情况,删除成功没有任何提示(没有消息就是好消息),偶尔会看到系统接收到一条新消息的提示,这个对删除操作没有影响。

之后,我们可以重复上述操作,直到留下 时间最近一次大备份

最后,可以用上面提到的命令确认磁盘空间。

END


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/786707.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-24
下一篇2023-08-24

发表评论

登录后才能评论

评论列表(0条)

    保存