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
其他限制学习
未完待续