Docker下的资源限制问题

发布时间 2023-12-11 09:52:31作者: 济南小老虎

Docker下的资源限制问题


问题背景

公司某产品出现了一个奇怪的OOM 错误提示. 

问题现象是 前台产品 提示 OOM cannot create native thread 
但是同时查看 机器的资源和容器cadviser的资源, 资源限制都很少. 

内存远远没有到达瓶颈, 并且看gclog也没有看到很多 GC信息
所以怀疑是资源限制导致的.

但是具体哪种资源限制也比较难以确认. 我这边也没有一个比较好的思路. 
只能自己做下测试与验证. 

查看宿主机的限制和容器的限制

我拿一个单节点的K8S节点进行一下简单的验证:
宿主机的限制:
open files                      (-n) 65535
stack size              (kbytes, -s) 8192
max user processes              (-u) 125328

容器内的限制
open files                      (-n) 1048576
stack size              (kbytes, -s) 8192
max user processes              (-u) unlimited


发现容器内外的限制总量不一致. 
然后计划基于此进行一下验证

进入容器内

使用如下命令创建无数进程
注意需要先试用如下命令进入容器
kubectl -exec -n namespace pod's_name bash 
然后执行命令
for i in $(seq 1 100000);do sleep 1000 & done

注意这个命令非常耗费资源, 一定要慎用.  随着线程数量的越来越多. 机器创建的速度会越来越慢. 
然后发现可以突破 65535的资源限制, 也就是如下:

在容器内部:
Tasks: 66302 total,   1 running, 66301 sleeping

说明跟宿主机的部分咸芝士没有关系的. 

内存使用情况

Tasks: 66302 total,   1 running, 66301 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.0 us,  3.8 sy,  0.0 ni, 93.6 id,  0.0 wa,  0.1 hi,  0.4 si,  0.0 st
MiB Mem :  31368.9 total,    411.7 free,  29466.7 used,   1490.5 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1359.5 avail Mem

kill 所有的sleep 进程之后:
Tasks: 164 total,   1 running,   3 sleeping,   0 stopped, 160 zombie
%Cpu(s):  1.0 us,  0.4 sy,  0.0 ni, 98.3 id,  0.0 wa,  0.1 hi,  0.1 si,  0.0 st
MiB Mem :  31368.9 total,  13212.6 free,  16554.4 used,   1601.9 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.  14307.7 avail Mem

其他限制学习

未完待续