$(nproc) X 1/2 MiB
AWS上的Red Hat OpenShift服务的应用程序的基本单元称为容器。 Linux容器技术是隔离运行进程的轻量级机制,以便它们仅限于与其指定资源交互。
许多应用程序实例可以在单个主机上的容器中运行,而无需了解彼此的进程、文件、网络等等。通常,每个容器提供单个服务(通常称为“微服务”),例如Web服务器或数据库,尽管容器可用于任意工作负载。
多年来,Linux内核一直在整合容器技术的功能。AWS上的Red Hat OpenShift服务和Kubernetes增加了在多主机安装中编排容器的能力。
由于Red Hat Enterprise Linux (RHEL)的行为,在CPU使用率高的节点上的容器似乎消耗的内存比预期的要多。更高的内存消耗可能是由RHEL内核中的kmem_cache
引起的。RHEL内核为每个cgroup创建一个kmem_cache
。为了提高性能,kmem_cache
包含一个cpu_cache
和任何NUMA节点的节点缓存。这些缓存都会消耗内核内存。
存储在这些缓存中的内存量与系统使用的CPU数量成正比。因此,CPU数量越多,存储在这些缓存中的内核内存就越多。这些缓存中较大量的内核内存可能导致AWS上的Red Hat OpenShift服务容器超过配置的内存限制,从而导致容器被终止。
为了避免由于内核内存问题而丢失容器,请确保容器请求足够的内存。您可以使用以下公式来估算kmem_cache
消耗的内存量,其中nproc
是nproc
命令报告的可用处理单元数。容器请求的下限应该是此值加上容器内存需求。
$(nproc) X 1/2 MiB