解决问题并查找根源:
一、服务空间不足,服务无法部署或服务不可用
二、清理了大日志文件,但是空间还是不足
1.首先是通过df -h命令查看磁盘的使用情况,主演是看Avail(可用)和Use(已用)的占用百分比,如下所示:
df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 50G 43G 4.2G 92% / tmpfs 32G 0 32G 0% /dev/shm /dev/sda1 485M 120M 341M 26% /boot /dev/mapper/VolGroup-lv_home 1.6T 1.4T 60G 96% /home
如果剩余量很大,则暂时可以没必要清理磁盘
还可以通过 find / -type f -size +100M 命令,搜索整个磁盘大于100M的大文件
2、开始查找服务器中的大文件,从根目录开始查找,通过du -h --max-depth=1 或者 du -sh * 命令查看当前目录下哪个子目录占用空间大小,然后一级一级du下去
3、进入到最底层目录查看哪个文件或者日志文件比较大,比如是logs文件夹下saas_user.log占用好几个G,如果是测试日志则可以清理,如果是线上或者数据比较重要的,
则可以清理比较久远的日志文件,如果是某个服务因为服务文件夹中某个文件过大导致服务运行较慢,则可以将对应文件备份到本地或者其他服务器然后删除,重新开启服务。
4、当然也可以用最简便的方法看清理日志文件,比如要定位大于100M的日志文件 find / -type f -size +100M -print
5、如果查找确认之后发现并无占用较大空间的文件,需确认该文件系统挂载点/home目录下是否已被使用并且存在占用空间较大的文件。使用umout /home卸载挂载点查看。
6、当我们删除了大文件以及占用很大的日志文件后,再次df查看一下占用量仍然是100%,那么就是因为有进程在对已删除文件的读写操作,这类操作是无效的,也正是磁盘空间莫名消失的根本原因。
7、问题所在是:当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间,最后造成磁盘空间占用100%,整个系统无法正常运行。这种情况下,通过df和du命令查找的磁盘空间,两者是无法匹配的,可能df显示磁盘100%,而du查找目录的磁盘容量占用却很小,因此我们可以断定是某个大文件被某些程序占用了,并且这些大文件已经被删除了,但是对应的文件句柄没有被关闭内核无法回收被占用空间。因此我们需要找到这些句柄(进程),通过执行命令 lsof | grep deleted 查看有那些进程
清理大文件时候记得曾经删除(rm)过这些文件,所以可以断定占空空间的元凶就是这些未被关闭的句柄资源,所以需要kill 掉释放空间。
8、kill 掉进程后可以在查看磁盘空间,解决问题
9、lsof |grep delete
磁盘空间满了的时候,找不到哪里被占用了,执行下上面的代码
10、服务器空间比较少,但是大部分的空间是被日志占用。当我们服务、服务日志无法再删除了之后,如果磁盘空间还是占用比较大。可以看一下linux系统日志。
cd /var/log
linux服务器的各种内核日志、启动日志等系统日志都会打印到 /var/log/message 日志文件中,而且也是占用资源最大的一块。所以可以清除这些日志。
注意:只能删除 message-20190630 这样已经归档的日志,不能删除 message 日志文件,否则可能会造成内核泄露,服务器崩溃!