系统磁盘空间/dev/xvda1占满原因分析
由于项目原因需要定期检查磁盘空间占用情况,常用检查命令如下:
1 2 3 4 | 1、查看磁盘空间大小 df -lh 2、查看对应文件大小 du --max-depth=1 -h / |
于一日发现在使用Flume + Kafka进行数据同步时,某一局点数据无法进行消费,通过df -lh查看发现系统空间满了,如下:
/dev/xvda1 20G 20G 0G 100% /
然后,通过du --max-depth=1 -h / 查询对应的大文件,发现此目录下文件占用了2.3G的空间。通过各种方法找,都找不到大文件,唯一的线索是挂载的/data01目录下Zookeeper的日志非常大,难道是此问题导致?
在一篇文章中看到过类似的情况,产生问题的原因:
在apache/tomcat在运行状态下,清空了运行服务的日志,从而导致了/dev/xvda1 满了的问题。一般情况下,大多数服务(包括脚本)在运行时,是不能删除当前正在写入的日志文件的。
原理分析:
1、当前access.log日志正在被apache进程占用。
2、 通过rm命令删除access.log,实际只删除了文件名(该日志文件应用记数不为0,因此空间不会被释放)。
3、 通过rm命令删除了access.log后,apache依然写日志到access.log中,当开启apache进程时,已经通过access.log定位到该文件的inode了,就是说再写日志是不通access.log,因此即使删除了access.log,apache依然写日志到access.log所在的inode节点,所以导致硬盘空间增加。
4、因为删除了access.log,所以我们就找不到该文件了,du也查不到,就会出现硬盘满了但看不到究竟是哪些文件占用的。
解决方法:
重启该日志文件的相关服务或程序,如:为apache日志文件则重启apache。
仿照该方法,先停止Zookeeper的运行,然后删除Zookeeper日志,重启Zookeeper后发现服务消费正常
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现