Linux SLUB:无法在节点上分配内存

Paw*_*mar 5 linux centos linux-kernel kubernetes

我们经常在下面留言 /var/log/messages

kernel: SLUB: Unable to allocate memory on node -1 (gfp=0x8020)
Run Code Online (Sandbox Code Playgroud)

在某些情况下,后跟分配表

kernel:    cache: sigqueue(12019:454c4ebd186d964699132181ad7367c669700f7d8991c47d4bc053ed101675bc), object size: 160, buffer size: 160, default order: 0, min order: 0
kernel:    node 0: slabs: 57, objs: 23313, free: 0
kernel:    node 1: slabs: 35, objs: 14315, free: 0
Run Code Online (Sandbox Code Playgroud)

好的,免费是0,但这怎么可以调整?

以下是设置信息


OS - Centos7.3
Kernel - 3.10.0-327.36.3.el7.x86_64
Docker - 1.12.6
Kubernetes - 1.5.5
Run Code Online (Sandbox Code Playgroud)

我们拥有由kurbernetes提供支持的私有云,拥有10个节点; 它在上个月工作正常,现在我们在每个节点上经常收到这些警报,最后几天pod /容器也增加了.

我们有足够的 memorycpu可用的每个节点上.

对这些警报进行任何微调都会非常有帮助.

附加信息: sysctl.conf选项

net.ipv4.tcp_timestamps = 0 
net.ipv4.tcp_max_syn_backlog = 4096 
net.core.somaxconn = 1024 
net.ipv4.tcp_syncookies = 1 
net.core.rmem_max = 16777216 
net.core.wmem_max = 16777216 
net.core.rmem_default = 65535 
net.core.wmem_default = 65535 
net.ipv4.tcp_rmem = 4096 87380 16777216 
net.ipv4.tcp_wmem = 4096 65536 16777216 
net.ipv4.ip_local_port_range = 1024 65535 
vm.max_map_count = 262144 
vm.swappiness=10 
vm.vfs_cache_pressure=100
Run Code Online (Sandbox Code Playgroud)

Sur*_*ade 1

问题似乎在于kernel,首先检查交换内存是否正确分配free -mmkswap -c如果交换内存未正确分配,则执行此操作。如果交换没问题,那么您可能需要更新内核。