飞天使-docker知识点8-docker的资源限制

2023-12-15 19:39:48

容器资源限制

Docker提供了多种资源限制的方式,可以根据应用程序的需求和系统资源的可用性进行选择。以下是一些常见的Docker资源限制及其使用情况:

CPU限制:通过设置CPU的配额(quota)和周期(period),可以限制容器使用的CPU时间片。这种资源限制在大多数情况下被广泛使用,以确保容器之间公平地共享CPU资源。

内存限制:通过设置容器的最大内存限制,可以限制容器使用的物理内存量。这对于避免容器过度消耗系统内存并导致系统崩溃非常有用。

网络带宽限制:可以使用Docker网络驱动程序设置容器的网络带宽限制。这对于保证网络资源的公平分配以及限制容器对网络的占用非常有用。

磁盘IO限制:可以使用I/O调度程序或限制磁盘带宽来限制容器的磁盘IO。这对于避免容器对磁盘资源的过度占用以及确保系统磁盘性能的稳定性非常重要。

GPU限制:对于需要使用GPU资源的容器,可以使用专门的GPU管理工具(如NVIDIA Docker)来限制容器对GPU的访问。

在实际应用中,CPU和内存限制是最常见的资源限制方式,因为它们可以直接影响容器的性能和稳定性。但具体使用哪种资源限制最多还是要根据应用场景和需求来决定。不同的应用可能对不同的资源有不同的需求,因此在使用Docker时需要根据具体情况进行调整和优化。


当容器内存资源不足时,Linux内核会使用Out of Memory(OOM)机制选择一个或多个进程进行杀死,以释放内存。如果你希望在容器内存不足时禁用OOM,可以通过以下方式进行设置:

在运行容器时设置--oom-kill-disable参数:

docker run --oom-kill-disable my-container
这将禁用容器的OOM机制,使其在内存不足时不会被自动终止。

在容器中设置oom_score_adj值:
在容器内部,你可以使用echo命令将oom_score_adj设置为一个较高的值,表示容器对OOM机制的“免疫力”更强。

echo -1000 > /proc/self/oom_score_adj
这将使得容器内的进程在OOM发生时更不可能被选中终止。

请注意,禁用OOM机制可能会导致内存问题进一步扩大,可能导致系统性能下降或容器崩溃。因此,在实际应用中,建议根据实际情况和需求来权衡是否禁用OOM机制,并确保适当的内存资源可供容器使用。


主要是限制 cpu 和 内存,磁盘io 限制没有用
cpu是可压缩性资源
内存不是可压缩性资源

oom_adj 调整可以避免oom 的出现

--oom-kill-disable  

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

示例
当使用Docker时,最常用的资源限制是CPU和内存限制。以下是它们的简要说明:

CPU资源限制:

--cpus:通过设置该参数,可以限制容器可以使用的CPU核心数。例如,使用--cpus=2表示容器最多可以使用2个CPU核心。
--cpu-shares:通过设置该参数,可以为容器分配CPU时间片的相对权重。较高的权重值表示容器将获得更多的CPU时间。默认情况下,所有容器的权重值相等。
内存资源限制:

--memory:通过设置该参数,可以限制容器可以使用的物理内存量。例如,使用--memory=4g表示容器最多可以使用4GB的内存。
--memory-swap:通过设置该参数,可以限制容器可以使用的交换空间(swap)。例如,使用--memory-swap=8g表示容器最多可以使用8GB的交换空间,这包括实际内存和交换空间的总和。
这些参数可以在运行容器时通过docker run命令进行设置,例如:

docker run --cpus=2 --memory=4g my-container
这样就会限制容器只能使用2个CPU核心和最多4GB的内存。

需要注意的是,CPU和内存的资源限制应根据实际需求进行调整,以确保容器能够正常工作并且不过度占用系统资源。根据应用程序的要求和系统的可用资源,可以灵活地设置适当的限制。

参考资料马哥

文章来源:https://blog.csdn.net/startfefesfe/article/details/135023033
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。