JAVA应用 文件删除后空间不释放问题查找

当一个JAVA应用频繁创建并删除文件,但磁盘空间未释放时,可以通过`lsof`检查被JAVA进程引用的已删除文件。使用`jmap`获取heap历史,观察与文件对象相关的实例数变化。进一步使用`jhat`分析heap dump,通过HTTP服务器7000端口定位引用问题,最终找到业务代码中未正确释放文件句柄的位置。
摘要由CSDN通过智能技术生成
问题:有一个JAVA应用会频繁地创建文件,完成业务逻辑后会删除该文件,但是发现磁盘已使用空间一直在增长。

1、查看标记为删除,但是未释放空间的文件(root账号)
root# lsof | grep deleted
java 27870 mq 253u REG 8,3 33556584 4325563 /***/db-4970.log (deleted)
java 27870 mq 254u REG 8,3 33558799 4325567 /***/db-4972.log (deleted)
java 27870 mq 255u REG 8,3 33557564 4325551 /***/db-4969.log (deleted)
java 27870 mq 256u REG 8,3 33558446 4325565 /***/db-4971.log (deleted)
java 27870 mq 257u REG 8,3 33554898 4325569 /***/db-4973.log (deleted)
java 27870 mq 258u REG 8,3 33554976 4325571 /***/db-4974.log (deleted)
....

发现JAVA进程27870对这些标记为删除的文件有引用

2、根据业务大致知道这些文件在那几个地方被使用,查看jvm heap中的实例数,确认这一点。

>$./jmap -histo:live 27870 > ~/27870.txt

间隔一段时间多次输出,发现与文件对象相关实例一直在增加:
第一次:
70: 179 5728 java.io.RandomAccessFile
71: 233 5592 java.io.FileDescriptor
--------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值