
OOM(Out Of Memory)内存不足,一般根本原因是一些不稳进程占据太多内存造成,在Docker中称作OOM事儿,当容器所使用的内存过多也会出现OOM事儿,这件事是由Linux内核的内存管理机制开展,并可谓是运用占据内存太多容器Kill掉,保证系统的可持续运转。Linux内核为了保证系统的稳定性而将内存划分为两大部分用户空间与内核空间
用户空间是发放到用户进程所使用的内存空间。内核空间是仅提供给内核运行的空间。用户的进程是打不开内核空间,而内核是可以访问用户空间与内核空间。在Linux内存管理机制里面还存在一个计划任务,检查电子计算机内存是否足够运用,分别收集以下这些指标
- Total page cache as page cache is easily reclaimed
- Total free pages because they are already available
- Total free swap pages as userspace pages may be paged out
-
Total pages managed by swapper_space although this double-counts the free swap -
pages. This is balanced by the fact that slots are sometimes reserved but not used - Total pages used by the dentry cache as they are easily reclaimed
- Total pages used by the inode cache as they are easily reclaimed
倘若内核发现内存不能应用中渐渐开展OOM情况检查,随后开启out-of-memory函数搜索应用内存数最多的进程并kill掉
在Docker的容器中默认是没有限制互联网资源所使用的,也就是说容器获得到CPU/内存与服务器之间是一样的,为了避免OOM事儿,可以给Docker的容器作一些调整
-
依据系统测试之后才放入办公环境的容器中
-
确保服务器上有足够的资源分配
-
运用SWAP(交换空间)
-
将容器转换到有足够内存的Docker Swarm服务上
Docker不建议手动式调整--oom-score-adj与--oom-disable-kill选项来避免OOM
