Linux内核参数min_free_kbytes linux内核参数查看

Linux内核参数min_free_kbytesNode 0, zone DMA
pages free 3960min 65low 81high 973.min_free_kbytes大小的影响 min_free_kbytes设的越大&#x

节点0,区域DMA

免费页面3960

65分钟

低81

高97

3. min_free_kbytes大小的影响

min_free_kbytes 设置越高,水印线就会越高,三线之间的缓冲区量也会相应增加。这意味着kswapd 将更早开始回收并回收更多内存(直到水位线[high] 才会停止)。这使得系统保留多余的空闲内存,一定程度上降低了成本。应用程序可用的内存量。在极端情况下,如果min_free_kbytes设置接近内存大小,则应用程序可能会留下太少的内存,并且可能会频繁发生OOM。

如果min_free_kbytes设置得太小,则系统保留内存太小。此外,在kswapd 回收过程中会分配少量内存(设置PF_MEMALLOC)。该标志允许kswapd 使用保留的内存。另一种情况是当有进程被OOM 选择杀死时。如有必要,在请求内存时也可以使用保留部分。无论哪种情况,使保留内存可用都有助于防止系统死锁。

2. lowmem_reserve_ratio

官方说明:

对于highmem 机器上的一些特殊工作负载,允许内核从“lowmem”区域分配进程内存是危险的。这是因为可以通过mlock() 系统调用或通过交换空间不可用来固定内存。

此外,在大型highmem 机器上,缺乏可重用的lowmem 内存可能是致命的。

因此,Linux 页面分配器有一种机制可以防止在可以使用highmem 的分配上过度使用lowmem。这意味着一定量的lowmem 受到保护,不会被合并到固定用户内存中。

“lowmem_reserve_ratio”可调参数决定内核保护这些较低区域的积极程度。

如果您有一台使用highmem 或ISA DMA 的计算机,并且您的应用程序使用mlock() 或在没有交换的情况下运行,您可能需要更改lowmem_reserve_ratio 设置。

1.功能

除了min_free_kbytes 为每个zone 预留一部分内存之外, lowmem_reserve_ratio 在每个zone 之间提供了一定的保护,主要是为了防止高端zone 在内存稀缺时过度使用低端zone 的内存资源进行预留。

例如,典型的节点机有三个:zone: DMA、DMA32 和NORMAL。 DMA 和DMA32 位于低端区域,内存较小。例如,96G内存的机器上两个区的总和就是比较高端的内存(通常根本没有内存)。 HIGH区电流),数量也大(90G)。低端内存具有某些特殊功能,例如,当DMA发生时,您只能在DMA区域内分配低端内存,因此当高端内存可用时应避免使用低端内存。预留尽可能多的内存,防止高端内存分配不足时稀有的低端内存被抢占。

计算方法

猫/proc/sys/vm/lowmem\\_reserve\\_ratio

256 256 32

内核使用上述保护数组来计算每个区域的保留页数量。计算也是以数组的形式存在,可以在/proc/zoneinfo中找到。

节点0,区域DMA

免费页面1355

3分钟

低3

高4

:

:

沼泽\\_其他0

保护: (0, 2004, 2004, 2004)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

页面集

cpu: 0 pcp: 0

:

分配内存时,将这些保留页值和水印相加,以确定是否可以满足分配请求,或者是否认为可用内存量太低,并应开始回收。

例如,如果普通空间(index=2)中的页面应用程序尝试在DMA空间中分配内存,并且当前标准为watermark[low],则内核将设置page_free=1355,计算watermark + Protection[2]。=3 + 2004=2007 page_free 表示空闲内存太少,无法分配。如果分配请求是从DMA 区域发送的,则使用Protection[0]=0 来满足分配请求。

区域[i]的保护[j]的计算规则如下:

(i j):

zone[i]-受保护的[j]

=(节点上从zone[i+1] 到zone[j] 的当前页面总和)

/lowmem\\_reserve\\_ratio[i];

(i=j):

(不应受到保护=0;

(i j):

(不是必需的,但看起来像0)

默认的lowmem_reserve_ratio[i]值为:

256(如果zone[i] 表示DMA 或DMA32 区域)

32(其他)。

从上面的计算规则可以看出,保留内存值是比率的倒数:256代表1/256,即高端区域内存大小的0.39%。

如果要保留更多页面,则应设置较小的值。最小值为1 (1/1 – 100%)。

与min_free_kbytes(水印)配合的示例

下面是在线服务器(96G)申请内存失败时的日志输出。

[38905.295014] java: 页面分配错误。顺序:1,模式:0x20,区域2。

[38905.295020] Pid: 25174,comm: java未受污染的2.6.32-220.23.1.tb750.el5.x86\\_64 #1

.

[38905.295348] 活动\\_anon:5730961 不活动\\_anon:216708 孤立\\_anon:0

[38905.295349] 活动\\_file:2251981 非活动\\_file:15562505 分隔\\_file:0

[38905.295350] 不可驱逐:1256 脏:790255 回写:0 不稳定:0

[38905.295351] 免费:113095 Slab_Reusable:577285 Slab_Reusable:31941

[38905.295352]映射:7816 shmem:4页表:13911弹跳:0

[38905.295355] 节点0 DMA 空闲:15796kB min:4kB low:4kB high:4kB active\\_anon:0kB inactive\\_anon:0kB active\\_file:0kB inactive\\_file:0kB B 分离(Anon)3336 00kB 分隔(文件):0kB 当前:15332kB mlocked:0kB 脏:0kB 写回:0kB 映射:0kB shmem:0kB Slab\\_可更新:0kB Slab\\ _不可更新:0kB 内核\\_堆栈:0kB 页表:0kB 不稳定:0kB 反弹:0kB 写回\\_tmp:0kB 页面\\_已扫描:0 全部\\_可重复使用?

[38905.295365] lowmem\\_reserve[]: 0 1951 96891 96891

[38905.295369] 节点0 DMA32 空闲:380032kB min:800kB low:1000kB high:1200kB 活动\\_anon:46056kB 不活动\\_anon:10876kB 活动\\_file:15968kB 活动\\ _文件:129772kB 不可删除:0kB 孤立(匿名) :0kB 孤立(文件) :0kB 存在:1998016kB mlocked:0kB 脏:20416kB 写回:0kB 映射:0 kB shmem333 600kB 板\\_ 可重复使用:11716kB 板\\_可重用:160kB内核\\_堆栈:176kB页表:112kBUnstable:0kB弹跳:0kB写回\\_tmp:0kB页面\\_扫描:576全部\\_不可重用?

[38905.295379] lowmem\\_reserve[]: 0 0 94940 94940

[38905.295383] 节点0 正常空闲:56552kB min:39032kB low:48788kB high:58548kB active\\_anon:22877788kB inactive\\_anon:855956kB active\\_file:8991 956kB 非活动\\_file:62120248kB 不可删除:5024kB 孤立(匿名) :0kB 孤立(文件) :0kB 存在:97218560kB mlocked:5024kB 脏:3140604kB 写回: 0kB 3 36031264kB shmem:16kB 板\\ _reclaimable:2297424kB 板\\ _unreclaimable:127604kB 内核\\_stack:12528kB 页表:55532kB 不稳定:0kB 弹跳:0kB 回写\\_tmp:0kB 页面\\_扫描:0 全部\\_重用不能吗?

[38905.295393] lowmem\\_reserve[]: 0 0 0 0

[38905.295396] 节点0 DMA: 1\\*4kB 2\\*8kB 0\\*16kB 1\\*32kB 2\\*64kB 0\\*128kB 1\\*256kB 0\\*512kB 1\\*1024kB 1\\*2048kB 3\\*4096kB=15796kB

[38905.295405] 节点0 DMA32: 130\\*4kB 65\\*8kB 75\\*16kB 72\\*32kB 95\\*64kB 22\\*128kB 10\\*256kB 7\\*512kB 4\\*1024kB 2\\*2048kB 86 \\ *4096kB=380032kB

[38905.295414] 节点0 正常: 12544 \\*4kb 68 \\*8kb 0 \\*16kb 0 \\*32kb 0 \\*64kb 0 \\* B=54816kB

[38905.295423]页面缓存页面总数17816926

1)从日志的第一行“order:1,mode:0x20”,我们可以看到它是一个GFP_ATOMIC类型的应用程序,并且order=1(page=2)

2)第一次内存申请尝试

__alloc_pages_nodemask() 首先尝试通过调用get_page_from_freelist() 来应用它。使用的标志位是ALLOC_WMARK_LOW|ALLOC_CPUSET,使用接收到的水印[低]阈值对每个区域进行检查。

zone_watermark_ok() 中考虑了z-lowmem_reserve[],以防止常规应用程序被分类到低端区域。例如,对于DMA32:

我们整理了上百道【运维技术栈面试题】,成为您运维面试路上的好助手。这样,你就可以安心参加面试并获得高薪offer。

这些面试题涵盖了从Shell、MySQL到K8s等云原生技术栈,适合运维行业新人以及运维行业新人的面试需求。升职或换工作以增加薪水。

本次访谈集内容为

174 运维工程师面试题128 k8s 面试题108 shell 脚本面试题200 Linux 面试题51 Docker 面试题35 Jenkis 面试题78 MongoDB 面试题17 ansible 面试题60 dubbo 面试题53 Kafka 面试题18 mysql 面试题40 nginx 面试题77 Redis 面试题Zookeeper 题28

总共1000多道面试题,内容全面且有价值。

174 道运营工程师面试问题

1.什么是运维?

2、运维人员经常需要在工作场所与操作人员进行交互。运营人员做什么工作?

3. 给定300台服务器,如何管理它们?

4.我们简单解释一下raid0、raid1和raid5这两种运行模式的运行原理和特点。

5、LVS、Nginx、HAproxy有什么区别?

6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?

7.Tomcat和Resin有什么区别?

8.什么是中间件?

9. Tomcat 的三个端口8005、8009、8080 是什么意思?

10.什么是CDN?

11.什么是网站灰度发布?

12、请简单说明一下DNS域名解析的过程。

13.什么是RabbitMQ?

14.Keepalived如何工作?

15.描述LVS工作流程的三种模式。

16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?

5、8009、8080这三个端口是什么?

10.什么是CDN?

11.什么是网站灰度发布?

12、请简单说明一下DNS域名解析的过程。

13.什么是RabbitMQ?

14.Keepalived如何工作?

15.描述LVS工作流程的三种模式。

16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?

17.如何重置mysql root密码?

以上关于#Linux内核参数min_free_kbytes的相关内容摘自互联网,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93014.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月5日 上午1:08
下一篇 2024年7月5日 上午1:08

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注