一次 KVM 虚拟机磁盘占满的排查过程
一次 KVM 虚拟机磁盘占满的排查过程
KVM 虚拟机系统为 CentOS,文件系统为 XFS。
现象如下:
- 使用
df -h
命令发现磁盘剩余空间为30k(总大小为30G),使用df -i
发现 inode 可用数量为 800(总数为18w,正常状态为1000w+) - 虚拟机为初始状态时,磁盘空间使用都正常
排查如下:
- 查看了几个日志,大小都在10M以下,并且这些日志几乎一一对应,不存在某个日志比其它多几个数量的问题,又因为是远程客户,于是漏了个文件,干
- 使用 du 命令(记住这个命令)排查具体是哪个目录占用的磁盘空间较多,
du -h --max-depth=1 /
的结果显示磁盘空间只占用了 25% 左右,另寻它法 - 在网上搜索有磁盘文件删除未释放的说法,使用命令
lsof | grep deleted
找到未释放的文件小的可怜只有 10M 左右,这个不成立 - 既然磁盘看不出有啥问题,那就从 inode 数量看看,看看哪个目录下打开的文件数量较多
find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n -r | head -n 20
最多的目录还是 man 下的,最多5000,最多的20个目录下的数量相加不足50%,这个也不成立 - 从文件系统的角度看看,是不是碎片太多了需要回收一些这个碎片,找到磁盘号
df -aT | grep -w xfs
,如果我的文件系统是 /dev/vda3, 那么通过xfs文件系统的命令xfs_db -c frag -r /dev/vda3
看到只有 1.7% 的碎片,清理碎片xfs_fsr /dev/vda3
, 然而并没啥用处,再次查看只减少了 0.1% 的碎片 - 裂开了,找不到解决方案,于是向红帽发了封邮件(未回)
因为一下拿不出解决方案,只能硬着头皮把这个虚拟机从客户那搞回来,恢复现场,有了进展
- 解压完后这个镜像文件有 30G,没多想,就是觉得有的大
- 尝试对这个镜像文件进行磁盘扩容,
qemu-img resize
, 在这之前实验了一下一个临时的虚拟机,其中一个命令qemu-img info
发现两个虚拟机的virtual size
都是30G,但是显示临时虚拟机的disk size
只有6G,而那个有问题的虚拟机disk size
刚好是 30G,目前这个虚拟机还没有启动,肯定是里面真的占用了这么多磁盘 - 于是准备把里面的日志文件拿出来在 vscode 中看一下,然后使用
virt-copy-out
一个文件时发现有一步巨慢,好了后看了一下这个文件 20G+,du的结果加上这个文件大小刚好就是总的大小,磁盘的问题就解决了,至于为什么这么大那是业务的东西了
由于和业务相关,所以写的还是有点模糊,这里解释一下
- xfs 文件系统的 inode 总数是会变的,在剩余磁盘空间不足5%时,开始减少
- 最最最重要的一个点,那个忽略的文件是被隐藏的(挂载内核),ls du 等命令是发现不了这个文件的,刚好人为的疏忽加上隐藏的特性导致排查的困难
- 碎片的清理功能还是很有用的,在宿主机上清理一下有几十的碎片被清理
一次 KVM 虚拟机磁盘占满的排查过程的更多相关文章
- KVM -> 虚拟机磁盘管理_03
1.KVM磁盘管理 1.KVM qcow2.raw.vmdk等镜像格式说明:http://blog.csdn.net/zhengmx100/article/details/53887162 raw: ...
- 更改kvm虚拟机磁盘大小
kvm 虚拟机的磁盘大小可通过命令:qemu-img resize filename size 来改,要注意的是resize只支持raw格式的磁盘文件,如果想更改qcow2等格式的磁盘大小,需先用qe ...
- nohup磁盘打满问题排查与解决
使用nohup ... & 命令启动服务器后,磁盘满了,服务宕了,然后一步一步排查是哪个文件过大,最终定位到是nohup.out文件过大,占了40G, df -lh #磁盘容量命令 du -s ...
- 记录一次数据库CPU被打满的排查过程
1 前言 近期随着数据量的增长,数据库CPU使用率100%报警频繁起来.第一个想到的就是慢Sql,我们对未合理运用索引的表加入索引后,问题依然没有得到解决,深入排查时,发现在 order by id ...
- Linux磁盘占满 no space left on device
假如当前文件删除了,如果还有其他进程还在使用这个文件,这个文件删不干净:https://www.cnblogs.com/heyonggang/p/3644736.html 在Linux下查看磁盘空间使 ...
- jenkins导致磁盘占满问题
背景 今天登陆jenkins提示磁盘空间不足,且构建发生错误 排查问题 cd到jenkins 安装目录 执行df -h 发现root目录沾满 执行 du -ah --max-depth=1 发现是.j ...
- 【问题记录】 Linux分区磁盘占满,导致ssh登陆闪退
问题描述 今天要去后台看日志查个问题,通过ssh登陆到服务器后准备用平时非常熟悉的less命令打开日志查看,突然xshell客户端就闪退了.一时感觉很蒙,怎么回事??由于之前有同事遇到类似的问题,提醒 ...
- openstack kvm 虚拟机磁盘差异衍生
1, openstack虚拟实例备份之--多镜像格式多镜像文件合并为一个镜像文件衍生-差异镜像文件 /var/lib/nova/instances/b0abc22f-1a73-4079-b1bc ...
- Docker启动出现"No space left on device" 或者 docker日志太多导致磁盘占满问题
机房有一台服务器上面部署了多个docker容器, 并且每个docker容器都往stderr中源源不断的输出日志,导致磁盘被占满了.Docker容器在启动/重启的时候会往/var/lib/docker中 ...
随机推荐
- 摊牌了!我要手写一个“Spring Boot”
目前的话,已经把 Spring MVC 相关常用的注解比如@GetMapping .@PostMapping .@PathVariable 写完了.我也已经将项目开源出来了,地址:https://gi ...
- Vue.js 学习笔记之二:数据驱动开发
在 Vue.js 框架中,与 HTML 页面元素的交互方式没有像原生 JavaScript 接口那么直接,它是通过先在 HTML 元素标签中嵌入一系列类似于普通标签属性的 Vue 指令属性来绑定数据, ...
- Python练习题 017:三支乒乓球队出赛名单
[Python练习题 017] 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比.请编程序找 ...
- 00 你的第一个C语言程序
C语言简介 C 语言是一种通用的.面向过程式的计算机程序设计语言,即编程语言. 为移植和开发 UNIX 操作系统,丹尼斯·里奇于1972年在贝尔电话实验室设计开发了 C 语言的第一个版本. C 语言同 ...
- Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- c++ 动态库的加载
转载:https://blog.csdn.net/ztq_12345/article/details/99677769 使用ide是vs, 使用Windows.h下的3个函数对动态库进行加载第一个:H ...
- Java 异常 Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date'
查询时发送给服务器的日期的字符串格式:yyyy-MM-dd HH:mm:ss 服务器接收到日期的字符串之后,向 MySQL 数据库发起查询时,因为没有指定日期时间格式,导致字符串数据不能正确地转换为日 ...
- win10下安装使用Docker:Docker for Windows
一.下载win10下安装docker和桌面管理的工具: 下载地址:Docker for Windows 安装软件学习地址:https://www.runoob.com/docker/docker-tu ...
- [源码阅读] 阿里SOFA服务注册中心MetaServer(2)
[源码阅读] 阿里SOFA服务注册中心MetaServer(2) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(2) 0x00 摘要 0x01 MetaServer 注册 1.1 ...
- 通过MapReduce降低服务响应时间
在微服务中开发中,api网关扮演对外提供restful api的角色,而api的数据往往会依赖其他服务,复杂的api更是会依赖多个甚至数十个服务.虽然单个被依赖服务的耗时一般都比较低,但如果多个服务串 ...