一次搞明白 Docker 容器资源限制

本文详细介绍了如何使用Docker的CGroup对容器进行资源隔离和限制,包括内存、CPU和磁盘IO的限制,以避免内存溢出(OOM)问题。通过设置内存选项如`-m`和`--memory-swap`,以及CPU限制如`--cpu-shares`、`--cpus`和`--cpuset-cpus`,可以确保容器稳定运行并防止资源过度占用。此外,还讨论了内存溢出的触发条件、解决办法以及压测工具stress的使用方法。
摘要由CSDN通过智能技术生成

前言

在使用容器时(未被Kubernetes进行管理的情况下),我们单台主机上可能会跑几十个容器,容器虽然都相互隔离,但是用的却是与宿主机相同的内核,CPU、内存、磁盘等硬件资源。注:容器没有内核。默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源;如果不对容器资源进行限制,容器之间就会相互影响,一些占用硬件资源较高的容器会吞噬掉所有的硬件资源,从而导致其它容器无硬件资源可用,发生停服状态。Docker提供了限制内存,CPU或磁盘IO的方法, 可以对容器所占用的硬件资源大小以及多少进行限制,我们在使用docker create创建一个容器或者docker run运行一个容器的时候就可以来对此容器的硬件资源做限制。

Docker核心

Docker分别使用Namespace和CGroup实现了对容器的资源隔离和资源限制,本文将会讲到怎么使用内核来调用CGroup对容器资源做限制。

OOM介绍

out of memorty
OOM:out of memorty的简称,称之为内存溢出

1.如果内存耗尽,内存将无法给予内存空间,内核检测到没有足够的内存来执行重要的系统功能,它会抛出OOM或Out of Memory异常,内存将会溢出,随之会有选择性的杀死相应的进程。
2.内存属于不可压缩性资源,如果执行这个进程的内存不够使用,这个进程它就会一直申请内存资源,直到内存溢出。
3.CPU属于可压缩性资源,所以CPU并不会出现这种情况,例如一个进程占用了一个核心100%的CPU,那么原本这个进程是需要占用200%的CPU资源,如果其它进程所占用的CPU核心并不需要多高的CPU频率,那么此进程就会占用掉空闲的CPU,如果其它进程也需要他自己核心的CPU频率,那么此进程就只能使用对它自己所使用CPU核心100%,因此叫做可压缩。
4.内存的有选择性:为什么不是杀死占用内存最高的进程呢?举个例子:例如我们运行了一个MySQL和一个Tomcat;这个MySQL原本是需要占用2G的内存资源,但他占用了1.9G;而Tomcat原本是需要占用500M的内存空间,可他占用了1G内存空间,这个时候当内存报异常OOM的时候,就会选择Tomcat进程进行发送kill -9的信号,进行杀死以释放内存。
5.当我们的一个重要的进程占用的内存超标而导致内存OOM的情况下,我们不希望内核来Kill掉我们这个进程,怎么办?我们可以调整内存OOM后kill进程的优先级,优先级越高越优先杀死,则反之 为此,Docker特地调整了docker daemon的OOM优先级,以免它被内核的杀死,但容器的优先级并未被调整
导致内存OOM
1.加载对象过大;
2.相应资源过多,来不及加载;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker中,可以通过设置容器资源限制来控制容器资源使用情况。以下是一些常见的方法来调整Docker容器资源限制: 1. CPU限制:可以使用`--cpus`选项来设置容器可以使用的CPU核心数。例如,`docker run --cpus 2`将限制容器使用的CPU核心数为2个。 2. 内存限制:可以使用`--memory`选项来设置容器可以使用的内存限制。例如,`docker run --memory 1g`将限制容器可使用的内存为1GB。 3. 网络带宽限制:可以使用网络驱动程序的功能来限制容器的网络带宽。不同的网络驱动程序可能有不同的配置选项,可以根据具体的网络驱动程序文档进行设置。 4. IO限制:可以使用`--device-read-bps`和`--device-write-bps`选项来设置容器的设备IO读写速率的限制。例如,`docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb`将限制容器对设备的读写速率为1MB/s。 5. 进程数限制:可以使用`--pids-limit`选项来设置容器可以创建的进程数量的限制。例如,`docker run --pids-limit 100`将限制容器创建的进程数量为100个。 需要注意的是,不同的Docker版本和环境可能会有不同的限制方式和选项。建议查阅官方文档或相关资源来获取更详细的信息和适用于特定版本的调整方法。 通过调整这些资源限制,可以有效地控制容器资源使用情况,提高应用程序的性能和稳定性,并避免容器之间的资源争用问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值