答案
当线上服务器磁盘满了时,这是一个紧急问题,可能会导致服务不可用、数据无法写入甚至系统崩溃。
首先要做的是快速止血,尽快把空间释放了,避免情况进一步恶化。首先是登陆到机器上(如果都无法登录了,那就只能置换机器了。)
一、查看磁盘使用情况
df -h du -sh /*
找出哪个分区、哪个目录占用了最多空间。
df(disk free)
用于显示文件系统的磁盘空间占用情况,包括每个挂载点的总空间、已用、可用和挂载路径。
Filesystem Size Used Avail Use% Mounted on /dev/sda1 40G 30G 8.0G 80% / tmpfs 1.9G 0 1.9G 0% /dev/shm
du(disk usage)
用于显示指定目录或文件占用了多少磁盘空间。常用于查找哪个目录或文件占用空间大。
du -sh /* 2.1G /home 1.2G /var 300M /usr
du -h --max-depth=1 /var 显示 /var 下一级目录占用空间大小。
二、清理临时文件
清空系统临时文件:
rm -rf /tmp/*
三、清理日志文件
多数情况下,磁盘满了都是日志打印的太多了,这时候可以先到你的应用日志目录下,看一下这些文件的大小,
对于一些历史日志文件,如果已经完成 ELK 的采集和同步了,就可以直接 rm -rf 物理删除。
如果你的日志只有一个文件,他又特别大,大概率是你的 logback 没有配置对,导致日志没有分成多个文件。这种情况下,根据情况,不能直接删除文件,因为你的应用还在用。这时候可以考虑用以下方式清空内容而不删文件:
> file_name
或者:
echo "" > file_name
这样可以让日志内容清空,但可能会导致日志丢失。
四、查找大文件
找出大于 1G 的文件:
find / -type f -size +1G -exec ls -lh {} \;
五、避免日志被系统打满
从根源上解决问题:
1. 定期清理脚本
- 写 cron job 自动清理老日志
2. 磁盘监控告警
- 使用 Prometheus + Grafana 或 Zabbix 监控磁盘使用率
- 设告警阈值(比如 80% 告警)
3. 日志分级 + 限量
- 按需写日志(只写 ERROR 级别)
- 配置日志轮转(logrotate)
4. 考虑分离日志、数据盘
- 应用数据、日志单独挂载到不同分区,避免挤爆系统盘