【随笔】设置min_free_kbytes会影响系统的可用内存

本文探讨了Linux内核参数vm.min_free_kbytes如何工作并影响内存管理,特别是直接回收策略。设置此参数过高或过低可能导致性能问题。调整min_free_kbytes可以减少直接回收导致的卡顿,但设置过高会减少可用内存。通过sar -B命令可监控调整效果。
摘要由CSDN通过智能技术生成

《What is vm.min_free_kbytes and how to tune it?》这篇文章对min_free_kbytes的测试很有意思,通过这篇文章我才发现设置这个参数不仅仅是影响Linux内存回收中的water_mark(尤其是direct reclaim回收方式,Linux有两种内存回收方式——一种是kswapd后台回收,在早期的内核版本kswapd是周期性唤醒,因此又叫周期回收,但是没有必要,真的没有必要,所以在现代Linux内核版本中已经不再是周期唤醒,而是在分配内存的时候会基于zone的water_mark来唤醒做后台回收内存;另一种就是direct reclaim,这种又叫同步回收,因为此时系统可用内存到了water_mark_min,意味着系统内存非常非常紧张,所以allocate page申请内存的进程会被阻塞直到回收可用内存。当然,如果经历了内存回收流程仍旧没有回收到足够的内存,那么在allocate page函数中会走out_of_memory函数的oom流程),还会影响系统的可用内存available memory。

设置了/proc/sys/vm/min_free_kbytes之后,通过water_mark_min计算water_mark_low和water_mark_high的默认公式:

watermark[min] = per_zone_min_free_pages (min_free_kbytes换算为page单位)

watermark[low] = watermark[min] * 5 / 4

watermark[high] = watermark[min] * 3 / 2

可以通过查看/proc/zoneinfo来验证:

min_free_kbytes设置的过高或过低都会导致系统性能问题:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-memory-tunables

如果你发现系统因为direct reclaim而导致卡顿、延迟(此时IO相关的指标会比较异常,并且系统负载会增加),那么你就需要调高min_free_kbytes,你可以通过sar -B命令观测pgscand和%vmeff来慢慢调整。这是为什么呢?因为min=min_free_kbytes,low=1.25min,high=1.5min,到low会唤醒kswapd做内存的后台回收,这时候即便是刷脏页、swap out等虽然会消耗磁盘io性能,但是绝大多数情况下不会影响进程;但是到了min,所有此时申请物理内存的进程都会被阻塞做direct reclaim,直到回收满足申请的内存。如果min_free_kbytes太小,那么就意味着kswapd后台回收启动没多久就进入direct reclaim,如果能把两者的时间间隔拉长,让后台回收有充分的时间来回收内存,那么就会降低direct reclaim的影响。

当然,设置比较大的min_free_kbytes会导致系统的可用内存减少(见下文引用《What is vm.min_free_kbytes and how to tune it?》),所以不可能没有限制的设置。这时候你就要通过sar -B来做观测慢慢调整。

《What is vm.min_free_kbytes and how to tune it?》原文地址:https://linuxhint.com/vm_min_free_kbytes_sysctl/


Performance

What is vm.min_free_kbytes and how to tune it?

by 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值