运维实战案例之文件已删除但空间不释放问题解析

2023-11-17


1、错误现象

运维的监控系统发来通知,报告一台服务器空间满了,登陆服务器查看,根分区确实没有空间了,如下图所示:

 wKioL1O7cFfxA4-BAAB6s9F7xWE508.jpg


这里首先说明一下服务器的一些删除策略,由于Linux没有回收站功能,我们的线上服务器所有要删除的文件都会首先移动到系统/tmp目录下,然后定期清除/tmp目录下的数据。这个策略本身没有问题,但是通过检查发现这台服务器的系统分区中并没有单独划分/tmp分区,这样/tmp下的数据其实是占用了根分区的空间。既然找到了问题,那么删除/tmp目录下一些大数据即可,执行如下命令,检查/tmp下最大的三个数据文件,如下图所示:

[root@localhost~ ]# du -s /tmp/*|sort -nr|head -3
69206016 /tmp/access_log
36 /tmp/hsperfdata_root
36 /tmp/hsperfdata_mapred

通过命令输出发现在/tmp目录下有个66G大小的文件access_log,这个文件应该是apache产生的访问日志文件,从日志大小来看,应该是很久没有清理apache日志文件了,基本判定是这个文件导致的根空间爆满,在确认此文件可以删除后,执行如下删除操作:

[root@localhost ~]#  rm  /tmp/access_log

接着查看系统根分区空间是否释放,如下图所示:

 wKioL1O7cHXhiY_EAAB6s9F7xWE440.jpg


从输出可以看到,根分区空间仍然没有释放,这是怎么回事?


2、解决思路

一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在向这个文件写数据等等,要理解这个问题,就需要知道Linux下文件的存储机制和存储结构。

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除access_log文件后,空间还没释放,就是因为httpd进程还在一直向这个文件写入内容,导致虽然删除了access_log文件,但文件对应的指针部分由于进程锁定,并未从meta-data中清除,而由于指针并未被删除,那么系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放也就不足为奇了。


3、问题排查

既然有了解决问题的思路,那么接下来看看是否有进程一直在向acess.log文件中写数据,这里需要用到Linux下的lsof命令,通过这个命令可以获取一个已经被删除但仍然被应用程序占用的文件列表,命令执行如下图所示:

 wKiom1O7cLfB1_vUAAGEQwwNhWI351.jpg


从输出结果可以看到,/tmp/acess.log文件被进程httpd锁定,而httpd进程还一直向这个文件写入日志数据,从第七列可知,这个日志文件大小仅70G,而系统根分区总大小才100G,由此可知,这个文件就是导致系统根分区空间耗尽的罪魁祸首,在最后一列的“deleted”状态,说明这个日志文件已经被删除,但由于进程还在一直向此文件写入数据,空间并未释放。


4、解决问题

到这里问题就基本排查清楚了,解决这一类问题的方法有很多种,最简单的方法是关闭或者重启httpd进程,当然也可以重启操作系统,不过这并不是最好的方法,对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,可以通过如下命令完成:

[root@localhost ~]# echo " " >/tmp/acess.log

通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志,这种方法经常用于在线清理Apache、Tomcat、Nginx等Web服务产生的日志文件。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运维实战案例之文件已删除但空间不释放问题解析 的相关文章

  • 将所有 BigDecimal 运算设置为特定精度?

    我的Java程序以高精度计算为中心 需要精确到至少120位小数 因此 程序中所有非整数都将由 BigDecimal 表示 显然 我需要指定 BigDecimal 的舍入精度 以避免无限小数表达式等 目前 我发现必须在 BigDecimal
  • Java中如何动态添加charsequence[]中的数据?

    初始化的一种方法charsequence is charsequence item abc def 但我不想以这种方式初始化它 有人可以建议其他方式吗 比如我们初始化的方式string arrays 首先 修复变量声明 charsequen
  • 使用 Nginx 时缺少 HTTP 状态代码名称

    我正在使用 Nginx 将所有 HTTP 请求重定向到 HTTPS 在我的 Spring Boot 应用程序中 这是我正在使用的 nginx 配置 通过它我可以将所有请求重定向到 Https 但是当我这样做时 我得到了状态码返回正确 但没有
  • 为什么byteArray的长度是22而不是20?

    我们尝试从字符串转换为Byte 使用以下 Java 代码 String source 0123456789 byte byteArray source getBytes UTF 16 我们得到一个长度为 22 字节的字节数组 我们不确定这个
  • 使用Java获取CSS文件中图像的URL?

    我正在尝试使用 Java 获取远程 CSS 文件中图像 所有 MIME 类型 的 URL 我正在使用 jsoup 来获取 css 的 URL 经过无数个小时的观看CSS解析器 http cssparser sourceforge net 由
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • Java 相当于 Perl 的 s/// 运算符?

    我有一些代码正在从 Perl 转换为 Java 它大量使用了正则表达式 包括s 操作员 我已经使用 Perl 很长时间了 但仍然习惯 Java 的做事方式 特别是 字符串似乎更难使用 有谁知道或有一个完全实现的Java函数s 这样它就可以处
  • JFreeChart - 创建移动图表时出现问题

    我在我的 java 应用程序中使用 JFreeChart Problem 我想绘制一个XY面积图 whose 域轴 x 轴 当我们开始绘制数据时应该自动水平滚动 我在中看到了同样的事情时间序列图表但我不想要任何时间系列图表 我只想要滚动的
  • 在 SWT 中单击鼠标触发事件?

    在SWT中 对于MouseListener接口 可用的方法有mouseUp mouseDown and mouseDoubleClick 如何根据用户点击触发事件 我们可以通过结合来做到这一点mouseUp and mouseDown 但没
  • “未找到 JAVA 路径。请检查 JAVA 是否已安装。”初始化 RSelenium 时出错

    我正在尝试启动一个 RSelenium 会话到 webscrape 但是 当运行此代码时 driver lt rsDriver browser c chrome chromever 76 0 3809 126 port 4444L 我收到此
  • Spring Boot 多部分文件始终为 null

    我正在使用 Spring Boot version 1 4 0 RC1 和 Spring Boot Stormpath 1 0 2 我正在尝试使用分段文件上传 但控制器中的 MultipartFile 始终为空 当我使用 RequestPa
  • Elasticsearch NodeBuilder 与 TransportClient

    对于其他 Elasticsearch 开发人员来说 这可能是一个非常简单 而且愚蠢 的问题 这两者之间有什么区别 我正在从 Java Web 应用程序连接到远程 Elasticsearch 服务器 到目前为止我一直在使用 Transport
  • 将 XML 从网站解析到 Android 设备

    我正在启动一个 Android 应用程序 它将解析来自网络的 XML 我创建了一些 Android 应用程序 但它们从未涉及解析 XML 我想知道是否有人对最佳方法有任何建议 这是一个例子 try URL url new URL your
  • Wildfly 10.1 消耗所有核心

    我们最近将银行应用程序从 java 1 6 升级到 1 8 将 jboss 4 x 升级到 wildfly 10 1 我们观察到 java 消耗了机器上可用的所有核心 10 有人可以告诉是什么原因吗 通常情况下 jboss 4 x 的最大
  • Java“非法访问操作”方法将被弃用? [复制]

    这个问题在这里已经有答案了 JDK 9 JVM 发出非法访问操作警告后 如果您使用一些非法访问 例如setAccessible 我的问题 Is setAccessible 以后会被封吗 此功能的官方参考 如果将被弃用 在哪里 我在任何地方都
  • Java 中 .NET 的 Lambda 表达式

    我最近 再次 从 C 迁移到 Java 但我非常怀念 lambda 表达式和 C 的 IEnumerable Foreach 之类的东西 所以我正在寻找Java中的lambda表达式库 有比这更好的图书馆吗LambdaJ http code
  • Java 应用程序启动,ProcessBuilder 一段时间后被阻止

    我正在开发一个 Java 桌面应用程序 我们称之为控制台 包含 3 个按钮 其中两个启动 Win32 应用程序 第三个应该启动一个可执行的 jar ProcessBuilder pb new ProcessBuilder java jar
  • Jackson 的 ObjectMapper 和 SQL 中的 RowMapper

    我们正在使用对象映射器 当将 ObjectMapper 与 RowMapper 一起使用时 是否应该在每个 mapRow 内部 如下所示 声明它 还是在 mapRow 外部声明为类公共成员 我认为根据本文 它应该作为公共类成员在外部 我应该
  • 删除Java中重载的方法

    有2个重载方法 这些方法中的每一个都将一种类型的列表转换为不同类型的列表 但第一种方法使用比较器 class SomeClass public static
  • 在java中打印阿拉伯字符串

    我试图在 java 中显示阿拉伯语文本 但它显示垃圾字符 示例 或有时在我打印时仅显示问号 我如何才能打印阿拉伯语 我听说它与unicode和UTF 8有关 这是我第一次使用语言 所以不知道 我正在使用 Eclipse Indigo IDE

随机推荐

  • 层次分析法基本介绍

    层次分析法 1 主要解决哪类问题 评价类 评价类问题要明确 评价的目标是什么 为达到这个目标的可选方案 评价的准则或标准是什么 2 原理 思路是啥 eg 小明高考完如何选择一个学校 如何选择一个旅游目的地 可以思考到 并得到表格 定义指标
  • PDF批量替换文字器免费版

    安装教程 1 下载解压后 得到文件 pdfreplacer exe 双击进入安装向导 2 选择语言 完成后确认进入下一步 3 下一步 4 系统默认安装在C盘 单击浏览可自定义选择安装路径 随后下一步 5 是否创建桌面快捷方式 建议选上 下一
  • PCB板基础知识

    制作机器人的时候不可避免的会用到PCB板 之前对它的认识只停留在会用这个层面 最近学习了PCB板的制作 发现了之前很多不知道的知识 于是整理出来和大家分享 1 过孔 双层板的连接通道 这个是之前最摸不着头脑的环节 拿到一个PCB就会发现上面
  • 拼接滚动地图-Quick-cocos2dx

    lua里面class的使用 一个class的使用 class方法用于创建类 其实就是lua表 传入类名和父类 父类为方法或表 class使用 第一次用A class fun 第二次用a A new 示例 local LevelView cl
  • SpringBoot之@Slf4j的使用详解

    先简单的来说 作用 Slf4j是在SpringBoot基础上Lombok为我们提供的日志输出注解 使用 先引入lombok依赖 将注解添加在类上 然后就可以使用log info 进行日志的输出打印 Slf4j注解填在当前类上相当于Sprin
  • vscode使用ssh远程linux可视化开发环境搭建

    目录 1 搭建 vscode 远程开发流程 2 在线搭建环境 3 离线搭建环境 4 ssh免密登录 设置白名单 5 参考文档 最近一直在做服务引擎开发 编译都是在服务器linux环境中进行 每次调试使用gdb修改使用vim贼麻烦 最后找了下
  • 10种Arduino IDE替代品开始编程

    当我们开始开发Arduino项目时 通常我们倾向于使用Arduino IDE 无论如何 如果我们对标准IDE不满意 我们应该考虑几种Arduino IDE替代方案 众所周知 在开发物联网项目或构建DIY项目时 Arduino是最受欢迎的原型
  • ARM指令集

    ARM指令的基本格式 ARM指令的基本格式为
  • echarts之柱状图(1)

    PS相关学习资料链接 Pink老师的教程分解 O O哈哈 div class bar h2 就业行业 a href 2019 a a href 2020 a h2 div class chart div div css自行设置 类名为cha
  • Failed to execute goal on project rocketmq-console-ng: Could not resolve dependencies for project

    Apache RocketMQ安装部署 Failed to execute goal on project rocketmq console ng Could not resolve dependencies for project org
  • TypeScript(五)类型别名及类型符号

    目录 引言 类型别名 基本用法 字面量类型 数字字面量 字符串字面量 布尔字面量 空字面量 枚举字面量 类型符号 联合类型 交叉类型 类型断言 尖括号 as关键字 非空断言 类型保护 typeof instanceof 类型谓词 索引类型
  • 解决 IProgress not found. Please update jupyter and ipywidgets. 问题

    解决 IProgress not found Please update jupyter and ipywidgets 问题 一 报错 IProgress not found Please update jupyter and ipywid
  • web服务搭建

    Python 吹爆Python 1行代码搭建Web服务器30行代码实现服务器的文件上传下载 需求 手机每日下载图片 然后需经过本人编写的Python脚本处理一遍 再返回到手机上 个人电脑不能保证时刻开机在线 自己也不可能一直在电脑旁边 故欲
  • Firebug 1.9新特性指南

    Firebug 1 9新特性指南 FireBug1 9发布了 引入了很多新特性 一 Firebug兼容的Firefox版本 Firefox4兼容Firebug1 7 3 Firefox5 11兼容Firebug1 9 Firefox12兼容
  • 【Python 协程详解】

    0 前言 前面讲了线程和进程 其实python还有一个特殊的线程就是协程 协程不是计算机提供的 计算机只提供 进程 线程 协程是人工创造的一种用户态切换的微进程 使用一个线程去来回切换多个进程 为什么需要协程 导致Python不能充分利用多
  • 分布式协议与算法——Paxos算法

    目录 Paxos算法 Basic Paxos算法 三种角色 如何达成共识 协商过程 小结 Multi Paxos算法 关于 Multi Paxos 的思考 领导者 优化Basic Paxos Chubby 的 Multi Paxos 实现
  • 解决Elasticsearch查询默认最大值返回10000

    文章目录 1 问题描述 1 描述 2 分析 2 解决方案 1 更改当前索引最大查询条数 max result window 2 能查出数据 但是total依然还是1000 更改track total hits 3 当java使用时应该 4
  • android webview 加载本地html并且解决多图卡顿问题

    使用webview加载本地html 因为本地html使用多张图片 滑动起来卡顿 解决方法如下 把文件夹放入assets文件夹下 Activity加载 WebView wView WebView findViewById R id webvi
  • PANet:基于金字塔注意力网络的图像超分辨率重建(全代码)

    PANet 基于金字塔注意力网络的图像超分辨率重建 本文为全代码 原文请看 传送门 import torch import torch nn as nn import torch nn functional as F from torch
  • 运维实战案例之文件已删除但空间不释放问题解析

    1 错误现象 运维的监控系统发来通知 报告一台服务器空间满了 登陆服务器查看 根分区确实没有空间了 如下图所示 这里首先说明一下服务器的一些删除策略 由于Linux没有回收站功能 我们的线上服务器所有要删除的文件都会首先移动到系统 tmp目