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