- 1、本文档共124页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux 操作系统 内存管理
目录
Linux 操作系统 内存管理 1
Docker 容器内存:我的容器为什么被杀了? 2
Linux buffer/cache解读
Linux page cache与buffer cache优化
Linux 一文详解缓冲区buffer和缓存cache
Linux 为什么系统的Swap变高了(上)
Linux 为什么系统的Swap变高了?(下)
Linux 内存是如何工作的 43
Linux 内存机制以及手动释放 swap 和 buffer 和 cache
Linux 内存泄漏了,我该如何定位和处理?
Linux 内存管理 页回收和swap机制
Linux 内存页表管理 浅析
Linux 物理内存、虚拟内存
Linux 理解系统缓存提高程序运行效率
Linux 运维 内存监控与设置
Page Cache:为什么我的容器内存使用量总是在临界点?
Redis 优化之内存分配控制 vm.overcommit_memory
Swap:容器可以使用Swap空间吗?
linux 内存性能评估工具 free/smem
内存一些小笔记 116
Docker 容器内存:我的容器为什么被杀了?
Docker 容器内存:我的容器为什么被杀了?
不知道你在使用容器时,有没有过这样的经历?一个容器在系统中运行一段时间后,突然消失
了,看看自己程序的 log 文件,也没发现什么错误,不像是自己程序 Crash,但是容器就是消失
了。
那么这是怎么回事呢?接下来我们就一起来“破案”。
问题再现
容器在系统中被杀掉,其实只有一种情况,那就是容器中的进程使用了太多的内存。具体来说,
就是容器里所有进程使用的内存量,超过了容器所在 Memory Cgroup 里的内存限制。这时
Linux 系统就会主动杀死容器中的一个进程,往往这会导致整个容器的退出。
我们可以做个简单的容器,模拟一下这种容器被杀死的场景。做容器的 Dockerfile 和代码,你
可以从这里获得。
第 1 页 /共 122 页
Docker 容器内存:我的容器为什么被杀了?
接下来,我们用下面的这个脚本来启动容器,我们先把这个容器的 Cgroup 内存上限设置为
512MB(536870912 bytes)。
#!/bin/bash
docker stop mem_alloc;docker rm mem_alloc
docker run -d --name mem_alloc registry/mem_alloc:v1
sleep 2
CONTAINER_ID=$(sudo docker ps --format {{.ID}}\t{{.Names}} | grep -i mem_alloc |
awk {print $1})
echo $CONTAINER_ID
CGROUP_CONTAINER_PATH=$(find /sys/fs/cgroup/memory/ -name *$CONTAINER_ID*)
echo $CGROUP_CONTAINER_PATH
echo 536870912 $CGROUP_CONTAINER_PATH/memory.limit_in_bytes
cat $CGROUP_CONTAINER_PATH/memory.limit_in_bytes
好了,容器启动后,里面有一个小程序 mem_alloc 会不断地申请内存。当它申请的内存超过
512MB 的时候,你就会发现,我们启动的这个容器消失了。
这时候,如果我们运行docker inspect 命令查看容器退出的原因,就会看到容器处于exited状
态,并且OOMKilled是 true。
第 2 页 /共
文档评论(0)