[转帖]谨慎调整内核参数:vm.min_free_kbytes

谨慎,调整,内核,参数,vm,min,free,kbytes · 浏览次数 : 0

小编点评

**内核参数:内存相关内存管理** 内核参数中包含了内存管理的设置,这些参数可以影响系统的内存使用和性能。 **内存层次:** * **node:**内核内部内存管理单元,包含了所有页。 * **zone:**多个node组成的逻辑区域,每个zone包含了多个page。 * **page:**最小可分配的内存单元,大小为4字节。 **内存分配范围:** 每个zone都有自己的min和high地址,表示其可用的内存范围。 **直接内存复用:** 当内存可用量小于zone的low值时,会触发内存直接复用,将低地址的页面从high地址页面中转移到低地址页面中。 **内存回收:** 当内存可用量达到或超过zone的low值时,会触发内存回收,将高地址的页面从低地址页面中转移到高地址页面中。 **内存大小調整:** * **min:**表示内存管理单元最小支持的内存量。 * **low:**表示内存管理单元最低可使用的内存量。 * **high:**表示内存管理单元最高可使用的内存量。 **注意:** * vm.min_free_kbytes 是一个用于调整虚拟内存最小可分配内存大小的内核参数。 * 调整vm.min_free_kbytes 参数的风险远大于调小的风险。

正文

https://www.cnblogs.com/muahao/p/8082997.html

 

内核参数:内存相关

内存管理从三个层次管理内存,分别是node, zone ,page;

64位的x86物理机内存从高地址到低地址分为: Normal DMA32 DMA.随着地址降低。

[root@localhost01 /home/ahao.mah]
#cat /proc/zoneinfo  |grep "Node"
Node 0, zone      DMA
Node 0, zone    DMA32
Node 0, zone   Normal
Node 1, zone   Normal

每个zone都有自己的min low high,如下,但是单位是page

[root@localhost01 /home/ahao.mah]
#cat /proc/zoneinfo  |grep "Node 0, zone" -A10
Node 0, zone      DMA
  pages free     3975
        min      20
        low      25
        high     30
        scanned  0
        spanned  4095
        present  3996
        managed  3975
    nr_free_pages 3975
    nr_alloc_batch 5
--
Node 0, zone    DMA32
  pages free     382873
        min      2335
        low      2918
        high     3502
        scanned  0
        spanned  1044480
        present  513024
        managed  450639
    nr_free_pages 382873
    nr_alloc_batch 584
--
Node 0, zone   Normal
  pages free     11105097
        min      61463
        low      76828
        high     92194
        scanned  0
        spanned  12058624
        present  12058624
        managed  11859912
    nr_free_pages 11105097
    nr_alloc_batch 12344
low = 5/4 * min
high = 3/2 * min

[root@localhost01 /home/ahao.mah]
#T=min;sum=0;for i in `cat /proc/zoneinfo  |grep $T | awk '{print $NF}'`;do sum=`echo "$sum+$i" |bc`;done;sum=`echo "$sum*4/1024" |bc`;echo "sum=${sum} MB"
sum=499 MB

[root@localhost01 /home/ahao.mah]
#T=low;sum=0;for i in `cat /proc/zoneinfo  |grep $T | awk '{print $NF}'`;do sum=`echo "$sum+$i" |bc`;done;sum=`echo "$sum*4/1024" |bc`;echo "sum=${sum} MB"
sum=624 MB

[root@localhost01 /home/ahao.mah]
#T=high;sum=0;for i in `cat /proc/zoneinfo  |grep $T | awk '{print $NF}'`;do sum=`echo "$sum+$i" |bc`;done;sum=`echo "$sum*4/1024" |bc`;echo "sum=${sum} MB"
sum=802 MB

min 和 low的区别:

  1. min下的内存是保留给内核使用的;当到达min,会触发内存的direct reclaim
  2. low水位比min高一些,当内存可用量小于low的时候,会触发 kswapd回收内存,当kswapd慢慢的将内存 回收到high水位,就开始继续睡眠

内存回收方式

内存回收方式有两种,主要对应low ,min

  1. direct reclaim : 触发min水位线时执行
  2. kswapd reclaim : 触发low水位线时执行

在el5下有一个参数: vm.extra_free_kbytes

这个参数含义是: low = min_free_kbytes*5/4 + extra_free_kbytes . 但是在7u下没有此参数.

[root@localhost02 /root]
#sysctl  -a | grep free
vm.min_free_kbytes = 512000
vm.extra_free_kbytes = 512000
[root@localhost02 /root]
#sysctl  -a | grep free
vm.min_free_kbytes = 512000
vm.extra_free_kbytes = 512000
fs.quota.free_dquots = 0

[root@localhost02 /root]
#T=min;sum=0;for i in `cat /proc/zoneinfo  |grep $T | awk '{print $NF}'`;do sum=`echo "$sum+$i" |bc`;done;sum=`echo "$sum*4/1024" |bc`;echo "sum=${sum} MB"
sum=499 MB

[root@localhost02 /root]
#T=low;sum=0;for i in `cat /proc/zoneinfo  |grep $T | awk '{print $NF}'`;do sum=`echo "$sum+$i" |bc`;done;sum=`echo "$sum*4/1024" |bc`;echo "sum=${sum} MB"
sum=1124 MB

[root@localhost02 /root]
#echo "499*5/4 + (512000/1024)"| bc
1123

注意

最近有业务线在调大min值得时候导致物理机hang引发故障,得出一些经验和建议:

  1. 对于线上128G的内存的机器,可以考虑将min设置为512M左右。因为,太大了,可能会导致内存的浪费;当然如果只有40G的物理机,更不要考虑把min设置超过1G了,这样会导致频繁的触发内存回收;具体优化也要根据业务来看。
  2. 关键是在于调整内存的内核参数的时候! 调大的风险远大于调小的风险! 如果有人想将vm.min_free_kbytes 调大,千万要注意当前的水位,如果一旦调大vm.min_free_kbytes 立刻触发direct reclaim,可能会导致机器hang住,ping的通,ssh不上,影响业务!hang住的原因是当vm.min_free_kbytes 是512M的时候,此时 free只有1G,此时正常运行,此时如果调大vm.min_free_kbytes 到5G,将会direct reclaim失败。
muahao@aliyun.com

与[转帖]谨慎调整内核参数:vm.min_free_kbytes相似的内容:

[转帖]谨慎调整内核参数:vm.min_free_kbytes

https://www.cnblogs.com/muahao/p/8082997.html 内核参数:内存相关 内存管理从三个层次管理内存,分别是node, zone ,page; 64位的x86物理机内存从高地址到低地址分为: Normal DMA32 DMA.随着地址降低。 [root@loca

[转帖]AnolisOS 入门八:使用keentune(轻豚) 调优系统性能

Anolis 龙蜥社区https://openanolis.cn/轻豚主站http://keentune.io/home 注意:使用keentune 前您应当对服务器硬件、Linux核心参数、网络通讯等知识领域有所了解 警告: 错误的使用调试工具,可能会使服务中断,请谨慎使用! 简介: 性能调优,是

[转帖]diskspd的使用

https://www.cnblogs.com/tcicy/p/10005374.html 参数翻译 可测试目标: file_path 文件abc.file # #1为第一块物理磁盘[谨慎,别拿系统盘测试,一般用于准备投入的数据磁盘测试]

[转帖]深入理解Redis的scan命令

熟悉Redis的人都知道,它是单线程的。因此在使用一些时间复杂度为O(N)的命令时要非常谨慎。可能一不小心就会阻塞进程,导致Redis出现卡顿。 有时,我们需要针对符合条件的一部分命令进行操作,比如删除以test_开头的key。那么怎么获取到这些key呢?在Redis2.8版本之前,我们可以使用ke

[转帖]面试官:Redis 性能优化都有哪些方法?

https://cloud.tencent.com/developer/article/2168105?areaSource=&traceId= 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻谨记优化铁则,才能使得Redis性能发挥到极致。 本文将会介

[转帖]Linux 监测服务心跳、服务重启策略

文章目录 前言背景一、curl服务可用验证二、服务探测脚本三、配置系统定时任务四、Linux特殊字符转义总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 提示:以下是本篇文章正文内容,下面案例可供参考 背景 当服务假死情况下,导致服务不可用,一时间定位不到服务假死原因,可以采用

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww