1、错误现象

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

这里首先说明一下服务器的一些删除策略,由于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

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

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

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服务产生的日志文件。

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

  1. linux中如何解决文件已删除但空间不释放的案例

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

  2. Linux运维实战|大文件切割

    介绍 日常工作中需要对日志文件进行分析,当日志文件过大时,Linux中使用vim.cat.vim.grep.awk等这些工具对大文件日志进行分析将会成为梦魇,具体表现在: 执行速度缓慢,文件内容需要加 ...

  3. Linux文件已删除,引用未释放(deleted)

    问题描述: 警告文件磁盘已经满了,通过:df -h, du -sh * 等指令配合使用,发现当前系统任然存在大量可以使用的空间.大量剩余的磁盘空间不清楚怎么丢失了- 问题重现: 通过指令:lsof | ...

  4. linux中的echo%3e文件,Linux文件已删除,引用未释放(deleted)

    问题描述: 警告文件磁盘已经满了,通过:df -h, du -sh * 等指令配合使用,发现当前系统任然存在大量可以使用的空间.大量剩余的磁盘空间不清楚怎么丢失了- 问题重现: 通过指令:lsof | ...

  5. linux list 添加失败,linux运维实战案例之Argument list too long错误与解决方法

    1.错误现象 这是一台Mysql数据库服务器,在系统中运行了很多定时任务,今天通过crontab命令又添加了一个计划任务,退出时发生了如下报错: #crontab -e 编辑完成后,保存退出,就出现下 ...

  6. 运维实战案例之“Too many open files”错误与解决方法

    本文出自 "技术成就梦想" 博客,请务必保留此出处http://ixdba.blog.51cto.com/2895551/1432521 一.问题现象 这是一个基于Java的Web ...

  7. 1 linux中解决文件已rm删除但空间不释放的案例

    1.错误现象 运维的监控系统发来通知,报告一台服务器空间满了,登录服务器查看,根分区确实没有空间了: [root@localhost ~]# df -h 这里首先说明一下服务器的一些删除策略,由于Li ...

  8. linux服务器运维实战记录,linux运维好书推荐《高性能Linux服务器运维实战》

    本书整体分为4个篇幅,以Linux运维平台下的开源应用软件为中心,涉及Linux运维的各个方面,主要从系统基础运维(命令.shell编程).系统性能调优.智能运维监控平台构建.运维实战案例四个方面展开 ...

  9. 《Splunk智能运维实战》——1.2 索引文件和目录

    本节书摘来自华章计算机<Splunk智能运维实战>一书中的第1章,第1.2节,作者 [美]乔史·戴昆(Josh Diakun),保罗R.约翰逊(Paul R. Johnson),德莱克·默 ...

最新文章

  1. 独创大学生答辩毕业设计系统
  2. 英特尔第11代酷睿处理器TigerLake发布,集成Xe GPU,采用10nm制程技术
  3. ElementUI中的el-form怎样格式化显示1和0为是和否
  4. 如何在MyBatis中优雅的使用枚举
  5. 简述container与container-fluid的区别
  6. QT5开发及实例学习之十九图形视图体系结构
  7. java中的让步_java基本教程之线程让步 java多线程教程
  8. 1 为发现 php,magento 1.8.1中发现sitemap模块的一个bug
  9. Lucene 文档检索 详细说明
  10. 陈弘:7月24日阿里云上海峰会存储大神
  11. 关于sql语句拼接字符串变量的操作
  12. HDU-1527-取石子游戏【威佐夫博弈】
  13. N卡自带录屏软件geforce 双屏录制问题
  14. 潘金莲——中国女性解放思想的先驱《其实我的心没走》
  15. java 对数组按条件进行分组
  16. 五招保护您的家用路由器安全
  17. TUP:分享产品背后的技术和用户体验
  18. 编程开发工具一览:新手到大神,程序员都用什么写代码?
  19. 【电影】-功夫巨星成龙电影全集版-原创独门专藏-
  20. 去掉最高分和最低分来评价成绩,用java实现

热门文章

  1. SAP MM MB21创建预留单据时候M标记能否自动勾选?
  2. networkx的基本使用
  3. 11大改革举措!国家自然科学基金2021年项目指南发布
  4. 英特尔第七任CEO敲定 斯旺为何受到董事会青睐?
  5. Deepmind AlphaStar 如何战胜人类职业玩家【中科院自动化所深度解析】
  6. 腾讯发布人工智能辅助翻译,致敬人工翻译
  7. 重磅 | MIT启动IQ计划:研究人类智能,让全世界的机构共同合作
  8. “头移植模型”论文称换头术可行 业内疑两大问题未解
  9. 中国研制出首款搭载寒武纪AI芯片的人工智能服务器
  10. 【线下首场免费报名啦】阿里云2020云内存数据库峰会 年度开发者的盛宴