kubernetes - pod 内特定进程的 GKE OOM-killer

标签 kubernetes out-of-memory

有关 GKE 上内存资源的问题。

我有一个具有 8G 内存和工作负载的节点,具有以下资源:

resources:
      limits:
        memory: 2560Mi
      requests:
        cpu: 1500m
        memory: 2Gi

最近我注意到很多情况下我在虚拟机日志本身(GCE)上看到如下消息:

[14272.865068] oom-kill:constraint=CONSTRAINT_MEMCG,nodemask=(null),cpuset=3e209c27d4b26f4f63c4f0f1243aeee928f4f2eb4c180e5b986211e3ae1c0b5a,mems_allowed=0,oom_memcg=/kubepods/burstable/podc90baea5-9ea8-49cd-bd38-2adda4250d17,task_memcg=/kubepods/burstable/podc90baea5-9ea8-49cd-bd38-2adda4250d17/3e209c27d4b26f4f63c4f0f1243aeee928f4f2eb4c180e5b986211e3ae1c0b5a,task=chrome,pid=222605,uid=1001\r\n
[14272.899698] Memory cgroup out of memory: Killed process 222605 (chrome) total-vm:7238644kB, anon-rss:2185428kB, file-rss:107056kB, shmem-rss:0kB, UID:1001 pgtables:14604kB oom_score_adj:864\r\n
[14273.125672] oom_reaper: reaped process 222605 (chrome), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB\r\n
[14579.292816] chrome invoked oom-killer: gfp_mask=0xcc0(GFP_KERNEL), order=0, oom_score_adj=864\r\n

这基本上表明节点出现 OOM 并终止节点上的一项服务,在我的例子中是 chrome,它是根据工作负载运行的服务。 与此同时,我看到工作负载出现错误(浏览器上的页面崩溃),但容器没有重新启动。

据我所知,GKE 可以在内存压力下驱逐 pod,因此我正在尝试找出服务本身的 OOM 和 pod 的 OOM-kill 之间的区别。

当我查看这个时间范围内的内存使用情况时,pod 达到了 2.4G 的顶部,而 Node 本身达到了 7.6G。

pod 没有因 oom-kill 错误而被驱逐的原因是因为它没有超过实际限制? oom-killer 不是应该重启容器吗?根据日志,容器上的特定服务刚刚被终止,并且所有内容“保持”相同。

如有任何帮助,我们将不胜感激。 谢谢 CL

最佳答案

这里有几个概念需要解释。首先是 Requests and Limits 的重要性。请参阅示例:

when a process in the container tries to consume more than the allowed amount of memory, the system kernel terminates the process that attempted the allocation, with an out of memory (OOM) error.

this article 中详细描述了您所面临的行为。以及this video .

比有Configuring Out of Resource Handling的想法。尤其是Node OOM Behavior :

If the node experiences a system OOM (out of memory) event prior to the kubelet being able to reclaim memory, the node depends on the oom_killer to respond.

我强烈建议您熟悉链接的 Material ,以便更好地理解您提到的主题。另外,有一篇很好的文章展示了它的实例:Memory Limit of POD and OOM Killer .

关于kubernetes - pod 内特定进程的 GKE OOM-killer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66487804/

相关文章:

kubernetes - kubernetes 中冲突的网络策略

kubernetes - Kubernetes 和 Native Kubernetes 上的 Flink 部署有何不同

kubernetes - 将 Kubernetes 卷限制为单个 Pod

android - 使用大图时如何使用JNI位图操作避免OOM?

java - 在发生 OutOfMemoryError 错误之前对对象进行计数 (Java)

flask - Kubernetes:自动确定另一个 pod/容器的 IP 地址

Azure AKS 'Kube-Proxy' Kubernetes 节点日志文件位置?

android - Android应用程序中的OutOfMemoryError

android - Android 内存不足错误

java - 清理登录数据