【解决问题】排查linux手动删除文件,但是文件标记为deleted,资源未释放

2024-04-03 14:12

本文主要是介绍【解决问题】排查linux手动删除文件,但是文件标记为deleted,资源未释放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

    生产环境我们把程序生成的数据文件手动删除后,但是空间并没有释放,导致硬盘被占用,不够用

问题排查:

    1.查看占用文件状态

      使用命令:  lsof | grep deleted 查看

        文件已经删除了,但是都是deleted状态

        那么这个deleted状态啥意思呢?

        deleted: 文件已经被删除但是还被进程占用,导致磁盘空间无法释放

   2.排查为啥文件被占用

   可以根据前面的进程id找到对应的程序,我们直接找到生成这个文件的代码,查看下代码:

查看代码,已经关闭流了,如下:

已经关闭流了,为啥还不释放呢?只能继续仔细的看整个生成文件的过程代码,终于发现问题,可能是下面这个代码造成的原因:

这个代码啥意思呢?
其实就是根据文件路径读取文件的内容行数

那么这个代码需要关闭流吗?

答案是:肯定需要的

在使用Files.find()Files.lines()Files.list()等方法时,他们返回的都是Stream<T>的类型但是这里会有一个隐含问题,因为这一类方法虽然返回的都是Stream<T>,但是它为了实现对文件的读写,所以内部往往封装了一个Reader或者Writer类似的操作对象,用来对文件流进行读写,所以需要我们在使用完毕之后,对资源进行回收,执行close方法。否则进程就会一直占用对应的资源,导致后续在进行删除的时候,并不会真正的删除文件,从而日积月累之下,导致磁盘空间占满

我们在看下源代码及其注释

根据源代码我们也可以看到这个必须关闭流

关闭流:

经过测试,问题解决

这篇关于【解决问题】排查linux手动删除文件,但是文件标记为deleted,资源未释放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/873129

相关文章

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.