Skip to content

面试速答(先看这里)

**一句话结论:**首先要做的就是快速止血,尽快把空间释放了,避免情况进一步恶化。

60秒标准回答:

当线上服务器磁盘满了时,这是一个紧急问题,可能会导致服务不可用、数据无法写入甚至系统崩溃

首先要做的就是快速止血,尽快把空间释放了,避免情况进一步恶化。首先是登陆到机器上(如果都无法登录了,那就只能置换机器了。)

查看磁盘使用情况

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**当线上服务器磁盘满了时,这是一个紧急问题,可能会导致服务不可用、数据无法写入甚至系统崩溃。
  • **要点2:**找出哪个分区、哪个目录占用了最多空间。
  • **要点3:**df (disk free)用于显示文件系统的磁盘空间占用情况,包括每个挂载点的总空间、已用、可用和挂载路径。
  • **要点4:**du (disk usage)用于显示指定目录或文件占用了多少磁盘空间。
  • **要点5:**du -h --max-depth=1 /var 显示 /var 下一级目录占用空间大小。

**记忆锚点:**file_name → disk → var → Prometheus → 考虑分离日志数据盘 → max-depth

易错提醒:

  • 首先要做的就是快速止血,尽快把空间释放了,避免情况进一步恶化。
  • 如果你的日志只有一个文件,他又特别大,大概率是你的logback没有配置对,导致日志没有分成多个文件,这时候,根据情况,不能直接直接删除文件,因为你的应用还在用,这时候可以考虑 > file_name 或者 echo "">file_name 的方式,让日志内容清空。

加分表达:

  • 首先是登陆到机器上(如果都无法登录了,那就只能置换机器了。
  • 清空系统临时文件: 多数情况下,磁盘满了都是日志打印的太多了,这时候可以先到你的应用日志目录下,看一下这些文件的大小,对于一些历史日志文件,如果已经完成ELK的采集和同步了,就可以直接 rm -rf 物理删除了。

追问准备:

  • 围绕「file_name」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「disk」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「var」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

当线上服务器磁盘满了时,这是一个紧急问题,可能会导致服务不可用、数据无法写入甚至系统崩溃。

首先要做的就是快速止血,尽快把空间释放了,避免情况进一步恶化。首先是登陆到机器上(如果都无法登录了,那就只能置换机器了。)

查看磁盘使用情况

bash
df -h
du -sh /*

找出哪个分区、哪个目录占用了最多空间。

df(disk free)用于显示文件系统的磁盘空间占用情况,包括每个挂载点的总空间、已用、可用和挂载路径。

bash
df -h

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)用于显示指定目录或文件占用了多少磁盘空间。常用于查找哪个目录或文件占用空间大。

bash
du -sh /*

2.1G    /home
1.2G    /var
300M    /usr

du -h --max-depth=1 /var 显示 /var 下一级目录占用空间大小。

清理临时文件

  • 清空系统临时文件:
bash
rm -rf /tmp/*

清理日志文件

多数情况下,磁盘满了都是日志打印的太多了,这时候可以先到你的应用日志目录下,看一下这些文件的大小,对于一些历史日志文件,如果已经完成ELK的采集和同步了,就可以直接rm -rf物理删除了。

如果你的日志只有一个文件,他又特别大,大概率是你的logback没有配置对,导致日志没有分成多个文件,这时候,根据情况,不能直接直接删除文件,因为你的应用还在用,这时候可以考虑> file_name或者echo "">file_name的方式,让日志内容清空。但是可能会导致日志丢失。

查找大文件

找出大于1G的文件:

bash
find / -type f -size +1G -exec ls -lh {} \;

扩展知识 ​

如何避免日志把磁盘打满? ​

  1. 定期清理脚本
  • 写 cron job 自动清理老日志
  1. 磁盘监控告警
  • 使用 Prometheus + Grafana 或 Zabbix 监控磁盘使用率
  • 设置告警阈值(比如 80% 告警)
  1. 日志分级+限量
  • 按需写日志(只写 ERROR 级别)
  • 配置日志轮转(logrotate)
  1. 考虑分离日志、数据盘
  • 应用数据、日志单独挂载到不同分区,避免挤爆系统盘