在一次线上环境中,突然各种中间件都挂了,随即上线上环境查看,发现根目录占用达到100%。
使用 df -h 查看如下:
[root@h /]# df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.9G 0 7.9G 0% /dev
tmpfs 1.6G 3.5M 1.6G 1% /run
/dev/vda1 59G 56G 0 100% /
tmpfs 7.9G 4.0K 7.9G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/mapper/vg0-vol0 1000G 14G 937G 2% /data
tmpfs 1.6G 0 1.6G 0% /run/user/0
发现确实磁盘满了,而且满的很彻底。系统盘占用100%,估计什么服务都跑不动了。
/dev/vda1 59G 56G 0 100% /
1、此时我们先去日志目录查看,/var/log
是系统日志目录,可以经常性的关注下,大容量日志尽早删除。对待进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,可以通过如下命令完成:
[root@h ~]# echo "" >/var/log/syslog
通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志,这种方法经常用于在线清理Apache、Tomcat、Nginx等Web服务产生的日志文件。当然我们还可以这样:
1、删除七天以前的日志 (谨慎删除mysql的日志,会启动不了mysql)
find /var/log/ -mtime +7 -name "*log" -exec rm -rf {} \;
2、删除七天以前的文件(谨慎)
find /var/log/ -mtime +7 -name -exec rm -rf {} \;
2、我们可以还可以去/tmp目录查看,/tmp是临时目录,该文件夹中的内容一般不会删除,以redhat为例,系统自动清理/tmp文件夹的默认时限是30天。30天不访问的/tmp下的文件会被系统自动删除的。/tmp-临时文件目录,能够被任何用户,任何程序访问,一般用来存放程序的临时文件,所以应该定期清理一下。FHS甚至建议在开机时,应该要将/tmp下的数据都删除,临时目录还有/var/tmp。
Linux有两个公知的临时目录:/tmp与/var/tmp,这两个目录被用户用于存储临时性的文件,亦经常被程序读写用户存储临时性数据。
3、如果上面两个方法都用到了还无法让服务器正常运行的话,则需要去看看安装的中间件的日志文件占用大小了,先查看大文件:
$ cd /
$ find . -type f -size +500M -print0 | xargs -0 du -h
或者更精准的指定
$ find / -type f -name "*.log" -size +500M -print0 | xargs -0 du -h
5.6G ./var/log/syslog.1
6.7G ./var/log/syslog
...
当我们发现日志log字眼的大文件,我们可以毫不留情的删掉
还可以通过 du -h|grep G命令查看所有的大文件,筛选出以 “G” 为单位大小的行,这样可以方便地找到目录或文件的磁盘空间使用量达到几个GB的项。当找到服务器安装的一些中间件(nacos、rabbitmq、es等)的日志文件也是可以删除的。
du -h --max-depth=1可以查看当前路径所有目录文件大小