【前言】
笔者最近有服务器突然停服务了,我登录服务器吓了一跳,下一面我们一起回顾一这个惊心动魄故事吧。
首先,使用ssh远程登录服务器,请出df大神看看硬盘的使用情况吧
df
Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
一般/dev/vda1为系统盘,像vdb、vdc为数据盘。
我们发现df输出的格式没有单位,可读性太低了。使用-h参数可解决。
-h或–human-readable 以K,M,G为单位,提高信息的可读性。
我的妈啊,所以居然/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层:
显示多了不方便查看,太乱多,如果再多点,还很难查到,哪个目录或文件大,就要用到排序, 请出sort命令。
sort
使用sort命令即可排序。 使用|来分隔不同的命令。
下面说下本文会用到的sort参数: -r(--reverse) 以相反的顺序来排序 -h( --human-numeric-sort):使用易读性数字(例如:2K、1G),默认从小到大排序 -s -s或–summarize 仅显示总计。只显示指定目录或当前目录的大小。
我们只显示一层目录大小并排序,就能很多找出最大的目录或文件。
这里我们很快知道了哪个目录占用空间大,直接进入目录manager
查看一下,发现有一个日志文件,太吓人了
不知队友是怎么想的,这么的日志文件,怎么查看呢。打印的是一些什么呢?看日志命名应该是9月20日启动的服务,才过去几天啊,就打印了那么多日志,云服务器很贵的,不能这样玩啊, 而且这个日志文件,根本没法看啊。
争得队友同事,把此文件删除。下面命令:
rm -f 0920.log
占用硬盘空间仍然
再df -h看一下,占用有硬盘空间依然。怎么回事呢?
虽然删除了那个文件,但是服务一直占用那个文件,必须要重启占用应用服务。是哪个服务,我也不知道。
用下面看看是哪个程序在写0920.log
lsof -n | grep 0920.log
只知道是java应用在写0920.log,具体服务还是不清楚。
问题临时解决
用history看看执行过什么命令,果然被我查到了。
如果history没找到,可以看看开机启动, 用下面命令:
cat /etc/rc.local 和
ls /etc/init.d
重启java服务后, 硬盘空间,就释放了。
但这个方法,治标不治本,过几天,还是被日志撑满服务器。还是让队友改代码吧。
总结
应用程序打印日志无可说的, 但这样打印日志,不可取的。各位看官你们说呢?
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !