今天下午看到zabbix上报警,提示有一台测试服务器硬盘快要满了,用量已经超过了百分之八十,我是这么做的:
第一步:首先通过df -h查看一下哪个路径下的空间用量比较大,结果发现是/下占用的空间比较多
[root@kk var]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 45G 4.8G 41G 81% /
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 199M 0 199M 0% /run/user/0
第二步:切加到根目录下,执行su -sh ./* 查看比较大的目录
[root@kk]# du -sh /*
0 /bin
100M /boot
0 /dev
32M /etc
0 /home
0 /lib
0 /lib64
0 /media
0 /mnt
0 /proc
72K /root
9.5M /run
0 /sbin
0 /srv
0 /sys
4.0K /tmp
2.2G /usr
38G /var #发现罪魁祸首在这里面
第三步:找出大文件
[root@kk var]# find ./ -size +500M
./nginx_access.log
[root@kk var]# du -sh ./nginx_access.log
37G ./nginx_access.log
我打开这个文件之后,发现都是nginx的日志,而且都是同一个源地址192.168.66.6/24,192.168.66.0/24是我划给开发部分使用的网段,而且我用tail -f 看了一下这个文件还在一直增大,我没有贸然删除文件,去问了一下开发,开发那帮人说也不知道怎么回事?幸好日志文件里面有源ip地址,于是我在他们的办公区询问了一下谁的IP地址是192.168.66.6,我让他们赶紧查看一下,结果有一半开发都手忙脚乱的去百度如何查看电脑的IP地址!!

当时我想到一个好办法,我登录上路由器,直接把192.168.66.6这个IP地址和对应的MAC地址都给禁用了!禁用了之后使用这个IP地址的电脑就不能上网了!这个人肯定会浮出水面,因为公司的网是我管着,他们搞不定只能来找我!
果真,没一会儿,新来的测试妹子一脸委屈的说她的电脑不能上网了!
我问她这两天有没有测试什么东西?她说前两天用软件测试了一个什么,但是就测试了一会儿就把软件关了,再次问他们确定了那个文件是没有什么用的,于是我就是把那人大日志文件给删除了,本以为完事了,结果通过df -h一查看,var目录还是那么大,通过find查看时大文件查不到了,应该是被删除 了呀!但是为什么磁盘占用量还是那么大呢?
思来想去,不知道昨回事!这里逼我出绝招了,网管三大法宝:重装、重启、格式化,于是我重启了服务器(测试环境,重启一下没啥大影响),这一招真的屡试不爽,重启完成之后再去通过df -h查看,发现真的好了!占用量一下子降到了百分之三十,怎么会这样?重启一下服务器就好了,想不通。
后来经过半天的谷歌,百度之后发现大多数服务(包括脚本)在运行时,是不能删除当前正在写入的日志文件的, 清空了运行服务的日志,这里是清理了当天或正在写入的日志文件,之前的没有清理掉,从而导致了上面问题。 原来是这样,当nginx服务运行运行的时候会“绑定”上日志文件,虽然我表现上清理了,但实现上nginx进程并没有释放日志文件,清理的只是文件名,nginx写日志的时候并不是根据文件名写入日志,而是根据文件的inode号,而inode号还没有释放,当我重启服务器之后,就相当重启了nginx服务,就把这个文件的inode号释放了,所以删除操作就变正常了!
我赶紧跑到测试妹子的电脑看了一下,果然,果然,那个测试软件一直在后台运行着……
00 02 * * * *
find /var/log/ -type f -mtime +3 | xargs rm -f