Linux系统解决磁盘空间不足的问题

描述

【前言】

笔者最近有服务器突然停服务了,我登录服务器吓了一跳,下一面我们一起回顾一这个惊心动魄故事吧。

首先,使用ssh远程登录服务器,请出df大神看看硬盘的使用情况吧

df

Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。

一般/dev/vda1为系统盘,像vdb、vdc为数据盘。

我们发现df输出的格式没有单位,可读性太低了。使用-h参数可解决。

-h或–human-readable 以K,M,G为单位,提高信息的可读性。

SSH

我的妈啊,所以居然/dev/vda1为系统盘100%, 还好能ssh登录服务器,只是http,mysql,java应用服务崩溃了。

是哪个目录或文件太小了,导致呢?我想到可能是队友java应用打印的日志,但他布哪个目录,我不清楚。我们有应用服务一般在/www/wwwroot, 所以我先定位在此目录。然后请出du命令

du

Linux du (英文全拼:disk usage)命令用于显示目录或文件的大小。先看看du

-h:以人类可读的方式显示

  -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
  -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
  -c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
  --apparent-size:显示目录或文件自身的大小
  -l :统计硬链接占用磁盘空间的大小
  -L:统计符号链接所指向的文件占用的磁盘空间大小

  du -h:这个就不多说了。
du -h

从输出可以看出du是显示所有目录和子目录所占用的磁盘空间。输出内容太多太乱了,不方便排查。

可以用下面的参数

–max-depth=<目录层数>

使用--max-depth=<目录层数> 超过指定层数的目录后,就方面排除了。

比如最多显示1层:

SSH

显示多了不方便查看,太乱多,如果再多点,还很难查到,哪个目录或文件大,就要用到排序, 请出sort命令。

sort

使用sort命令即可排序。 使用|来分隔不同的命令。

下面说下本文会用到的sort参数: -r(--reverse) 以相反的顺序来排序 -h( --human-numeric-sort):使用易读性数字(例如:2K、1G),默认从小到大排序 -s -s或–summarize 仅显示总计。只显示指定目录或当前目录的大小。

我们只显示一层目录大小并排序,就能很多找出最大的目录或文件。

SSH
SSH
 

这里我们很快知道了哪个目录占用空间大,直接进入目录manager

查看一下,发现有一个日志文件,太吓人了

SSH

不知队友是怎么想的,这么的日志文件,怎么查看呢。打印的是一些什么呢?看日志命名应该是9月20日启动的服务,才过去几天啊,就打印了那么多日志,云服务器很贵的,不能这样玩啊, 而且这个日志文件,根本没法看啊。

争得队友同事,把此文件删除。下面命令:

rm -f 0920.log

占用硬盘空间仍然

再df -h看一下,占用有硬盘空间依然。怎么回事呢?

虽然删除了那个文件,但是服务一直占用那个文件,必须要重启占用应用服务。是哪个服务,我也不知道。

用下面看看是哪个程序在写0920.log

lsof -n | grep 0920.log

SSH

只知道是java应用在写0920.log,具体服务还是不清楚。

问题临时解决

用history看看执行过什么命令,果然被我查到了。

SSH

如果history没找到,可以看看开机启动, 用下面命令:

cat /etc/rc.local 和

ls /etc/init.d

重启java服务后, 硬盘空间,就释放了。

SSH

但这个方法,治标不治本,过几天,还是被日志撑满服务器。还是让队友改代码吧。

总结

应用程序打印日志无可说的, 但这样打印日志,不可取的。各位看官你们说呢?







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分