• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Linux大文件已删除,但df查看已使用的空间并未减少解决

Linux大文件已删除,但df查看已使用的空间并未减少解决

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了linux df,linux df命令,linux df h,linux中df命令,linux df命令详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Linux大文件已删除,但df查看已使用的空间并未减少解决


Linux大文件已删除,但df查看已使用的空间并未减少解决

磁盘快满了,这时候准备去删除一些大文件

于是我使用ncdu 查看了一下当前系统占用资源比较多的是那些文件,到源头了,那就把它给删除了吧,

满心欢喜的去查看磁盘情况。

磁盘并没有多大的变化,这是怎么回事。

有问题不可怕,干净找baidu/google,找到原因了,说是虽然删除了,但是没有释放资源。

从网上找了一些资料:

执行 lsof | grep deleted我发现有大量刚刚删除文件的进程存在,果断给他kill 掉。但是可能会造成一些影响,比如说一下正在写的文件,之前那样删除的方法就是不对的。


1、错误现象

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

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

1234[root@localhost~]#du-s/tmp/*|sort-nr|head-369206016/tmp/access_log36/tmp/hsperfdata_root36/tmp/hsperfdata_mapred

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

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

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

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

2、解决思路

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

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

3、问题排查

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

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

4、解决问题

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

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

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

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Linux大文件已删除,但df查看已使用的空间并未减少解决

相关文章

  • 2017-05-26Android实用技巧-缓存的使用分析
  • 2017-05-26使用 Diagwait 作为诊断工具,获取用于诊断 Oracle Clusterware 节点驱逐
  • 2017-07-22Android性能优化
  • 2017-05-26Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小,androidtextview
  • 2017-05-26认识一下Kotlin语言 Android平台的Swift
  • 2017-05-26Android的消息机制,Android消息机制
  • 2017-05-26Android 5.0 Settings源码简要分析
  • 2017-05-26初次使用Android Studio时的配置
  • 2017-05-225.1 Fragment基本概述
  • 2017-05-26安卓高级组件-----进度条,安卓-----进度条

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 银联支付,支付
    • android 自定义title,androidtitle
    • 年底了,给MySQL做个例行巡检吧
    • 机顶盒上gridview+ScrollView的使用。,gridviewscrollview
    • andriod打开摄像头和打开相册,andriod摄像头相册
    • 使用C++实现QML的TreeView Model (二)
    • 在 Android 上使用 RxNetty
    • mysql core文件的正确打开姿势
    • Retrofit+RxJava(1)-在Android Studio中配置,retrofitrxjava
    • Android学习——四种绑定监听事件,android监听

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有