一、简介
可以用来管理当一个内存区域(zone)内部的内存耗尽时,是从其内部进行内存回收还是可以从其他zone进行回收的选项,我们可以通过/proc/sys/vm/zone_reclaim_mode文件对这个参数进行调整。
二、安装
yum install numactl -y
三、实例
现象:
1:根据zabbix监控,该服务器每隔6个小时左右会有一次内存大量回收。也就是已用内存从250g掉到了20g左右。
2:在掉内存的时候,服务器性能是出现问题了。最直观的表现就是网络连接建立不了。
查看系统numactl状态
[root@dc-skyeye:/usr/bin]# numactl -H
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node 0 size: 131037 MB
node 0 free: 1019 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node 1 size: 131071 MB
node 1 free: 10799 MB
node distances:
node 0 1
0: 10 20
1: 20 10
分析:
根据上面numa的输出,我就发现两个node可用内存相差太大了。然后我果断把zone_reclaim_mode从1改成了0.然后问题得到解决了。
解决:
echo 0 > /proc/sys/vm/zone_reclaim_mode
四、优化
echo 0 > /proc/sys/vm/zone_reclaim_mode:意味着关闭zone_reclaim模式,可以从其他zone或NUMA节点回收内存。
echo 1 > /proc/sys/vm/zone_reclaim_mode:表示打开zone_reclaim模式,这样内存回收只会发生在本地节点内。
echo 2 > /proc/sys/vm/zone_reclaim_mode:在本地回收内存时,可以将cache中的脏数据写回硬盘,以回收内存。
echo 4 > /proc/sys/vm/zone_reclaim_mode:可以用swap方式回收内存。
五、总结
a、当某个节点可用内存不足时:
1、如果为0的话,那么系统会倾向于从其他节点分配内存
2、如果为1的话,那么系统会倾向于从本地节点回收Cache内存多数时候
b、Cache对性能很重要,所以0是一个更好的选择。