df -h 显示100% 但 du -sh /* 统计远小于实际占用的排查步骤

浅萱君_6758

浅萱君_6758

2026-01-21

512人浏览

原创

磁盘空间未释放是因已删除但被进程占用的文件,可用lsof +L1查找deleted条目,按大小排序定位大文件,通过重启进程、日志重载或谨慎清空/proc/PID/fd/方式释放,并配置logrotate和定期巡检预防。

df -h 显示100% 但 du -sh /* 统计远小于实际占用的排查步骤

这种情况通常是因为有已删除但仍在被进程占用的文件,导致磁盘空间未被释放。df 显示 100%,而 du 统计总和远小,说明“看不见”的文件占用了大量空间。

确认是否存在被删除但仍被打开的文件

运行以下命令查看被删除但未释放的文件:

lsof +L1 或 lsof | grep deleted

输出中会列出类似 /var/log/syslog (deleted) 的条目,这些就是罪魁祸首。重点关注大文件(看 SIZE 列或用 lsof -n | grep deleted | sort -k7 -hr | head -20)。

Java Api Extractor
Java Api Extractor

从 Java 项目中提取 Controller 层接口定义为 JSON 数据。

下载

定位占用空间最多的进程和文件

结合 lsof 和文件大小排序快速定位:

  • 按文件大小倒序查看所有被打开的 deleted 文件:
    lsof -n +L1 -s | awk '{if($7~/[0-9]+[KMG]/) print $0}' | sort -k7,7hr | head -10
  • 查看某进程打开的所有文件(含 deleted):
    lsof -p PID(替换为实际 PID)
  • 检查 /proc 下对应进程的 fd 目录是否包含大 size 的 deleted 链接:
    ls -lh /proc/PID/fd/ | grep deleted

释放被占用的空间

只有让对应进程释放文件句柄,空间才会真正回收:

  • 若进程可重启:直接 systemctl restart 服务名 或 kill -TERM PID(优雅终止)
  • 若进程不能停(如数据库、Java 应用):尝试其内置日志轮转或 reload 操作(如 kill -USR1 PID 触发某些服务重开日志)
  • 极端情况(不推荐):手动清空 /proc/PID/fd/N(需 root),例如:
    echo > /proc/PID/fd/12(仅适用于可截断的文件,且存在风险,务必确认文件用途)

预防与日常检查

避免问题反复发生:

  • 配置 logrotate 并确保 postrotate 脚本正确通知服务重新打开日志
  • 监控 lsof +L1 输出频率,加入巡检脚本
  • 对长期运行的服务,定期检查其日志路径和 open files 状态:
    find /var/log -xdev -type f -size +100M -ls 2>/dev/null
  • 使用 du -shx /* 2>/dev/null | sort -hr 替代 du -sh /\*(-x 避免跨文件系统误统计)

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

java 日志监控

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

3180

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

269

24

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

549

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1698

6

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

2023.09.04

1158

7

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2023.06.29

2945

3

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2023.08.14

4081

10

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2023.08.31

3311

3

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.05

1047

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习