默认情况下,容器没有资源使用限制,可以使用主机内核调度程序允许的尽可能多的资源
Docker提供了控制容器使用资源的方法,可以限制容器使用多少内存或CPU等
docker info命令可以查看内核中的某项特性警告(在输出结尾处)
修改内核参数 /etc/default/grub
vim /etc/default/grub
若没有足够的内存来执行其他重要的系统任务,将会抛出OOM,随后系统会开始杀死进程以释放内存,凡是运行在宿主机的进程都有可能被kill
产生OOM异常时,Dockerd尝试通过调整Docker守护程序的OOM优先级来减轻这些风险,但是容器的OOM优先级并未调整,这使得容器被杀死可能性更大
不推荐通过守护程序或容器上手动设置--oom-score-adj为极端负数,或通过在容器上设置--oom-kill-disable来绕过这些安全措施
linux会为每个进程算一个分数,最终将分数最高的kill
/proc/PID/oom_score_adj
范围为-1000到1000,值越高容易被宿主机kill掉,如果将该值设置为-1000,则进程永远不会被kill
/proc/PID/oom_adj
范围为-17到+15,取值越高越容易被干掉,如果是-17,则表示不能被kill
/proc/PID/oom_score
这个值是系统综合进程的内存消耗量、CPU时间和oom_adj计算出的进程得分,消耗内存越多得分越高,容易被宿主机kernel强制杀死
stress-ng是一个压力测试工具,可以通过软件仓库进行安装,也提供了docker版本的容器
软件包安装
Centos:yum -y install stress-ng
Ubuntu:apt -y install stress-ng
容器方式安装
docker pull lorel/docker-stress-ng
docker run -it --rm lorel/docker-stress-ng
Docker可以强制执行硬件内存限制,即只允许容器使用给定的内存大小
Docker也可以执行非硬性内存限制,即容器可以使用尽可能多的内存