A-A+

LXC和OpenVZ在容器内存不足时会怎么样?持续硬盘读取bug记录

2023年06月24日 VPS评价 等您评论

一个简单的实验记录,分别测试LXC和OpenVZ在容器内存不足时的表现
测试系统均为Alpine 3.17,内存均为64MB

cat /etc/issue
Welcome to Alpine Linux 3.17

LXC

这里的LXC是使用proxmox开的,也可以用lxd,效果几乎一样

为了使测试情景更加接近真实情况,先装个docker

apk add docker
service docker start

看一下此时的内存占用

勉强够用

磁盘IO,没啥问题

#宿主机运行
systemd-cgtop -i

继续加码,再开个docker应用

再开一个docker后,由于内存不足,容器卡死

从宿主机来看,IO直接持续读取

如果因内存不足卡住的lxc很多,将会导致宿主机的守护进程无响应,而且LXC容器似乎没有办法解决此Bug

OpenVz7

同样的,先装个docker

看一下此时的内存占用


iotop看一下磁盘负载,没啥问题

加码

直接OOM,对嘛,没内存了就OOM就是了,而不是像LXC一样明明没内存却卡住不kill程序,导致硬盘负载一直居高不下。

把内存调为70M再测一次,仍然是OOM,尽量排除虚拟化不同程序内存占用的问题。

临时补丁

找不到特别好的解决方案,只能写了一个监控程序,记录容器近一段时间内的IO量,当出现异常高的IO读取时,强制关闭容器。

还有一些头疼的地方,lxd不支持读取历史数据,因此只能监控cgroup的数据来实现io的监控 。这可能就是lxd轻量的地方吧,基础占用比较低,但是好多东西都没有
proxmox的api相对完善,能够读取历史IO数据,但是只记录了byte/s没有iops数据(还是我没找到?),另外proxmox不支持实例的io限制,也就是说有一个lxc炸了直接会占满磁盘的所有IO。

标签:

给我留言