当前位置: 首页 > news >正文

Linux 磁盘空间“消失”之谜:文件已删,空间却不释放?

你是否遇到过这种诡异情况?
🔸 df -h 显示磁盘 95% 已用
🔸 du -sh /var/log 却只占 10GB
🔸 明明 rm -f catalina.out 删除了 50GB 日志
🔸 空间却一点没回来!

别慌!
这不是磁盘坏了,也不是文件系统 bug,
而是 有进程还在“偷偷”占用已删除的文件!

今天,手把手教你定位“幽灵进程”、释放空间、彻底根治

1、为什么删了文件,空间却不释放?

在 Linux 中,文件删除 ≠ 空间释放!

关键机制:

文件被删除时,只是移除了目录项(unlink)
只要还有进程打开了这个文件(持有文件描述符),
磁盘空间就不会释放!
直到该进程关闭文件或退出,空间才真正归还。

通俗理解:
就像你借了本书,图书馆把书从书架拿走(rm),但你还没还(进程还在写),书就不能给下一个人用

2、实战:3 步定位“占着茅坑不拉屎”的进程

第一步:确认是否存在“已删除但未释放”的文件

查看被进程打开但已删除的文件(重点关注 deleted)

lsof +L1

正确输出示例:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
java     1234 root    1w   REG  253,0 52428800 1234567 /app/logs/catalina.out (deleted)
nginx    5678 www-data 5w  REG  253,0 1073741824 7654321 /var/log/nginx/access.log (deleted)

重点看:

PID:罪魁祸首进程 ID
SIZE/OFF:占用空间大小(单位:字节)
(deleted):标记文件已被删除但未释放

第二步:根据 PID 查看进程详情

查看进程信息

ps -fp 1234

查看该进程打开的所有文件(验证)

lsof -p 1234 | grep deleted

第三步:释放空间(2 种安全方案)

方案一:优雅重启进程(推荐)

# 例如 Tomcat
./tomcat/bin/shutdown.sh && ./tomcat/bin/startup.sh

例如 Nginx(支持 reload)

nginx -s reload
✅ 优点:服务不中断(Nginx/Logrotate 场景适用)

方案二:强制 kill(慎用)

kill -9 1234
❗ 仅用于无状态进程(如临时脚本、失控 Java 进程)

❌ 切勿用于数据库、核心服务!

🛡️ 如何预防?3 条黄金法则

  1. 日志轮转必须用 logrotate + copytruncate 或 reload

错误做法:
❌ 千万别这样!

rm -f app.log && touch app.log
正确做法(logrotate 配置):
/var/log/myapp/*.log {dailyrotate 7compressmissingoknotifemptycopytruncate   # 适用于无法 reload 的程序(如 Java)# 或postrotate/bin/kill -USR1 `cat /var/run/nginx.pid`  # 适用于 Nginxendscript
}
  1. Java 应用:避免直接重定向日志到文件
    推荐使用 Logback / Log4j2 + 滚动策略,而非:
java -jar app.jar > app.log 2>&1 &  # 高危!
  1. 监控“已删除但未释放”文件
# Prometheus + node_exporter 已支持
node_filesystem_files_deleted
或自定义告警脚本:if lsof +L1 | grep -q deleted; thenecho "ALERT: Deleted files still held by processes!" | mail -s "Disk Leak" admin@example.com
fi

快速自查清单

现象可能原因解决方案
df 和 du 结果相差巨大有进程占用已删文件lsof +L1 定位
删除日志后磁盘仍满应用未关闭文件描述符重启或 reload 进程
空间突然释放进程意外退出检查是否异常崩溃

写在最后

在 Linux 里,文件的生命,由进程说了算。
删除只是开始,释放才是终点。
掌握 lsof +L1,
你就能在磁盘“消失”的迷雾中,
一眼看穿真相!

http://www.dtcms.com/a/557898.html

相关文章:

  • P1990 覆盖墙壁(dp)
  • 计算机操作系统理论学习
  • 胶州建网站推广游戏的平台
  • 未来之窗昭和仙君(四十九)集成电路芯片生产管理出库——东方仙盟筑基期
  • 哈尔滨公司网站建设科技企业网站源码
  • 行业网站推广怎么做wordpress-3.7
  • Pandas 简介与安装
  • openpnp - 吸嘴的单独校准
  • 程序员除了做软件是不是就做网站县 两学一做网站
  • 企业网站制作公司有哪些口碑营销的本质是什么
  • 北京住房和建设部网站首页网站开发结构图
  • 最新电子电气架构(EEA)调研-4
  • Google Chrome (dev beta)
  • SimPy经典案例分析
  • 跨端开发实践:多端适配指南
  • 索引的知识总结
  • 外贸汽车网站制作设计类专业笔记本电脑推荐
  • 织梦网站网站上的图用美图秀秀做可以吗
  • WebMvcConfig 和 WebSecurityConfig 详解
  • 使用unity做网站商城网站建设运营协议书
  • 21.7 企业级监控与日志系统实战:Prometheus+Grafana+ELK全链路配置指南
  • wordpress网站搬家书画院网站源码
  • css属性使用手册
  • SAPMM修改物料评估类型后报错:M7115只是可能对有相同评估类进行倒记帐(本月1002,前月1007)
  • 现在主流的网站开发语言全网整合营销平台
  • 08数据展示:Grafana数据可视化工具
  • 做网站多少钱_西宁君博相约宿迁人才网
  • v-code-diff入口文件的配置
  • 北京网站优化推广效果网站备案 取消
  • STM32 解锁芯片的方法