自学内容网 自学内容网

Linux虚拟内存系统常用参数说明-rk1126

参考连接:Linux虚拟内存系统常用参数说明 - 生活费 - 博客园

https://zhuanlan.zhihu.com/p/274736354

              total        used        free      shared  buff/cache   available
Mem:           417M         22M        357M        292K         37M        384M
[root@rk:/proc/sys/vm]# cat admin_reserve_kbytes    默认值是min(free pages * 3%, 8MB)。这些内存是为了给管理员登录和杀死进程恢复系统提供足够的内存。
8192
[root@rk:/proc/sys/vm]# cat extfrag_threshold    控制进行内存整理的意向,作用于内存分配路径中,该值设置得越小,越倾向于进行内存整理。
500
[root@rk:/proc/sys/vm]# cat overcommit_kbytes    当系统需要限制虚拟内存使用的大小时,可以根据overcommit_kbytes或者overcommit_ratio来设置这个限制值。如果设置了overcommit_kbytes的值,则通过这个值设置允许使用的虚拟内存大小;如果没有设置overcommit_kbytes(该值为0),则使用overcommit_ratio来设置允许使用的虚拟内存。
0
[root@rk:/proc/sys/vm]# cat block_dump    设置的是非零值,则会启用块I/O调试。更多的关于块I/O调试的信息可以参见Documentation/laptops/laptop-mode.txt。
0
[root@rk:/proc/sys/vm]# cat extra_free_kbytes    这个sysctl -w vm.extra_free_kbytes=1024000意思就是预留10G的空闲内存,需要根据业务场景调整大小。调整的依据是根据sar -r命令查看到RT高时,释放了多少内存决定的。

0
[root@rk:/proc/sys/vm]# cat overcommit_memory    该参数控制系统是否允许超额分配内存。默认值为0,建议值为1
0
[root@rk:/proc/sys/vm]# cat compact_memory     只有在启用了CONFIG_COMPACTION选项才有效。当向该文件(/proc/sys/vm/compact_memory)写入1时,所有的内存域都会被压缩,使空闲的内存尽可能形成连续的内存块。
cat: compact_memory: Permission denied
[root@rk:/proc/sys/vm]# cat highmem_is_dirtyable    首先highmem_is_dirtyable只有在CONFIG_HIGHMEM定义的情况下,才有效。
默认为0,即在计算dirty_ratio和dirty_background_ratio的时候只考虑low mem。当打开之后才会将highmem也计算在内。
0
[root@rk:/proc/sys/vm]# cat overcommit_ratio    查看overcommit_kbytes
50
[root@rk:/proc/sys/vm]# cat compact_unevictable_allowed    在CONFIG_COMPACTION设置了的时候这个参数才能访问。这个参数被写1的之后,压缩是可以检查不能被写出的、lru(最近最少使用)的页面以便进行压缩的。这个应该使用在为了大的连续内存而可以接受小的页面错误的系统中。这个参数被设置为0来阻止不能被写出的页面的移动。默认值是1。
1
[root@rk:/proc/sys/vm]# cat laptop_mode    0:允许直接内存回收对匿名页lru链表中的页进行回写操作,并且允许直接内存回收唤醒flush内核线程
    非0:直接内存回收不会对匿名页lru链表中的页进行回写操作
0
[root@rk:/proc/sys/vm]# cat page-cluster    该参数控制一次写入或读出swap分区的页面数量。它是一个对数值,如果设置为0,表示1页;如果设置为1,表示2页;如果设置为2,则表示4页。如果设置为0,则表示完全禁止预读取。
  默认值是3(一次8页)。如果swap比较频繁,调整该值的收效不大。
  该参数的值越小,在处理最初的页面错误时延迟会越低。但如果随后的页面错误对应的页面也是在连续的页面中,则会有I/O延迟。
3
[root@rk:/proc/sys/vm]# cat dirty_background_bytes    当脏页所占的内存超过dirty_background_bytes时,内核的flusher线程开始回写脏页。注意:该参数和dirty_background_ratio是相对的。当其中一个参数文件被写入,即时生效,清零另一个参数
0
[root@rk:/proc/sys/vm]# cat legacy_va_layout    参数用于控制 Linux 内核的虚拟地址空间布局。虚拟地址空间是指进程在内存中使用的地址范围。
当 legacy_va_layout 参数被设置为1时,Linux 内核使用传统的虚拟地址布局方式。在这种布局方式下,内核将虚拟地址空间的前3GB保留给用户空间(用户进程可使用),将最后1GB保留给核心空间。
当 legacy_va_layout 参数被设置为0时,Linux 内核使用新的虚拟地址布局方式。在这种布局方式下,内核将虚拟地址空间的前1TB保留给用户空间,将接下来的128TB保留给核心空间。这种布局方式可以提供更大的用户空间地址范围,适用于需要大量内存的应用程序。
虚拟地址空间布局对于系统的性能和可用内存空间有一定的影响。选择合适的布局方式取决于系统的需求和应用程序的特性。
0
[root@rk:/proc/sys/vm]# cat panic_on_oom    控制内核在OOM时是否panic。
  如果设置为0,内核会杀死内存占用过多的进程。通常杀死内存占用最多的进程,系统就会恢复。
  如果设置为1,在发生OOM时,内核会panic。然而,如果一个进程通过内存策略或进程绑定限制了可以使用的节点,并且这些节点的内存已经耗 尽,oom-killer可能会杀死一个进程来释放内存。在这种情况下,内核不会panic,因为其他节点的内存可能还有空闲,这意味着整个系统的内存状 况还没有处于崩溃状态。
  如果设置为2,在发生OOM时总是会强制panic,即使在上面讨论的情况下也一样。即使在memory cgroup限制下发生的OOM,整个系统也会panic。
  默认值是0。
  将该参数设置为1或2,通常用于集群的故障切换。选择何种方式,取决于你的故障切换策略。
  panic_on_oom=2和kdump一起使用,可以给你更多的信息,便于定位发生OOM的原因。
0
[root@rk:/proc/sys/vm]# cat dirty_background_ratio    该参数控制系统后台写入脏页的比例。默认值为10,建议值为1-5
10
[root@rk:/proc/sys/vm]# cat lowmem_reserve_ratio    在有高端内存的机器上,从低端内存域给应用层进程分配内存是很危险的,因为这些内存可以通过mlock()系统锁定,或者变成不可用的swap空间。在有 大量高端内存的机器上,缺少可以回收的低端内存是致命的。因此如果可以使用高端内存,Linux页面分配器不会使用低端内存。这意味着,内核会保护一定数 量的低端内存,避免被用户空间锁定。
  这个参数同样可以适用于16M的ISA DMA区域,如果可以使用低端或高端内存,则不会使用该区域。如果值是256,则代表1/256,即为0.39%的zone内存大小。如果想要预留更多页,应该设更小一点的值。
32      0       0
[root@rk:/proc/sys/vm]# cat percpu_pagelist_fraction    每个CPU能从每个zone所能分配到的pages的最大值(单位每个zone的1/X),0为不限制
0
[root@rk:/proc/sys/vm]# cat dirty_bytes    当脏页所占的内存数量达到dirty_bytes时,执行磁盘写操作的进程自己开始回写脏数据。注意:该参数和dirty_ratio是相对的。当其中一个参数文件被写入,即时生效,清零另一个参数
0
[root@rk:/proc/sys/vm]# cat max_map_count    该参数控制系统允许的最大内存映射数量。默认值为65530,建议值为262144。

65530
[root@rk:/proc/sys/vm]# cat stat_interval     VM统计信息更新的时间间隔,默认值是1s。
1
[root@rk:/proc/sys/vm]# cat dirty_expire_centisecs    该参数控制系统脏页过期时间。默认值为3000,建议值为1000-2000。单位是百分之一秒
3000
[root@rk:/proc/sys/vm]# cat min_free_kbytes    该参数控制系统保留的最小空闲内存。默认值为4096,建议值为65536。单位是kb
2613
[root@rk:/proc/sys/vm]# cat stat_refresh    任何读取或写入(仅限 root)都会将所有 per-cpu vm 统计信息刷新到它们的全局总数中,以便在测试时获得更准确的报告,例如猫 /proc/sys/vm/stat_refresh /proc/meminfo

作为副作用,它还会检查负总数(在其他地方报告为 0),如果找到任何 EINVAL 则“失败”,并在 dmesg 中显示警告。 (在撰写本文时,已知一些统计数据有时会被发现是负面的,但没有不良影响:这些统计数据的错误和警告会被抑制。)

在Linux操作系统中,/proc/sys/vm目录包含了与虚拟内存管理相关的参数和统计信息。其中,stat_refresh是一个控制内核是否更新/proc/stat文件中系统统计信息的参数。
/proc/stat文件包含了系统中各种进程和资源的统计信息,包括CPU使用情况、上下文切换次数、中断次数等。这些统计信息对于系统性能分析和监控非常有用。
stat_refresh参数决定了内核更新/proc/stat文件中统计信息的频率。当stat_refresh被设置为非零值时,内核会以固定的时间间隔更新/proc/stat文件,将最新的统计信息写入其中。这样,用户程序可以通过读取/proc/stat文件获取最新的系统统计信息。
默认情况下,stat_refresh被设置为0,表示禁用内核自动更新/proc/stat文件。用户程序可以通过将stat_refresh设置为非零值,启用自动更新功能。
总而言之,stat_refresh参数用于控制内核是否自动更新/proc/stat文件中的系统统计信息。启用该功能可以让用户程序获取实时的系统性能统计信息,用于系统监控和性能优化等目的。
[root@rk:/proc/sys/vm]# cat dirty_ratio    该参数控制系统脏页占内存的比例。默认值为20,建议值为5-10。
20
[root@rk:/proc/sys/vm]# cat mmap_min_addr    该参数定义了用户进程能够映射的最低内存地址。由于最开始的几个内存页面用于处理内核空引用错误,这些页面不允许写入。该参数的默认值是0,表示安全模块不需要强制保护最开始的页面。如果设置为64K,可以保证大多数的程序运行正常,避免比较隐蔽的内核BUG。
32768
[root@rk:/proc/sys/vm]# cat swappiness    该参数控制系统在内存不足时,内核将页面交换到磁盘的程度。默认值为60,建议值为10-30。
60
[root@rk:/proc/sys/vm]# cat dirty_writeback_centisecs    该参数控制系统写回脏页的时间间隔。默认值为500,建议值为100-200。单位是百分之一秒。如果设置为0,则禁止周期性地唤醒回写线程。
500
[root@rk:/proc/sys/vm]# cat mmap_rnd_bits    用来确定程序虚拟地址空间的基地址所偏移的位数,会在支持地址随机化的计算机体系中的mmap的分配中使用。这个值会因为计算机体系所支持的最大值与最小值所限定。
8
[root@rk:/proc/sys/vm]# cat user_reserve_kbytes    控制用户空间可用的内存保留量。当用户空间程序消耗内存时,内核会按照一定的算法计算用户空间程序当前的内存需求,并保留一定量的内存作为缓冲区,以确保用户空间程序稍后再次申请内存时能够快速获得。这个保留的内存量就由 user_reserve_kbytes 参数控制。
user_reserve_kbytes 参数的默认值是 131072(即128MB),它可以通过修改 /etc/sysctl.conf 文件或使用 sysctl 命令动态调整。将该值设为较高的数值可以增加用户空间程序可以使用的内存量,从而提高性能,但会减少内核用于缓冲区的内存量。设为较低的值则会确保内核可以更多地保留内存作为缓冲区,提高内核的 I/O 性能。但是过度减小该值可能会导致用户空间程序频繁申请内存导致性能下降。
总之,user_reserve_kbytes 参数可以通过调整来平衡用户空间程序和内核之间的内存使用,以便在性能和内存利用率之间取得最佳平衡。
13233
[root@rk:/proc/sys/vm]# cat dirtytime_expire_seconds
43200
[root@rk:/proc/sys/vm]# cat oom_dump_tasks    如果启用,在内核执行OOM-killing时会打印系统内进程的信息(不包括内核线程),信息包括pid、uid、tgid、vm size、rss、nr_ptes,swapents,oom_score_adj和进程名称。这些信息可以帮助找出为什么OOM killer被执行,找到导致OOM的进程,以及了解为什么进程会被选中。
  如果将参数置为0,不会打印系统内进程的信息。对于有数千个进程的大型系统来说,打印每个进程的内存状态信息并不可行。这些信息可能并不需要,因此不应该在OOM的情况下牺牲性能来打印这些信息。
  如果设置为非零值,任何时候只要发生OOM killer,都会打印系统内进程的信息。
  默认值是1(启用)。
1
[root@rk:/proc/sys/vm]# cat vfs_cache_pressure    该参数控制系统内核缓存的大小和清理频率。默认值为100,建议值为50-100。
100
[root@rk:/proc/sys/vm]# cat drop_caches    只释放pagecache:1 只释放dentries和inodes缓存:2 释放pagecache、dentries和inodes缓存:3.注意这个操作不是破坏性操作,脏的对象(比如脏页)不会被释放,因此要首先运行sync命令。
cat: drop_caches: Permission denied
[root@rk:/proc/sys/vm]# cat oom_kill_allocating_task     控制在OOM时是否杀死触发OOM的进程。
  如果设置为0,OOM killer会扫描进程列表,选择一个进程来杀死。通常都会选择消耗内存内存最多的进程,杀死这样的进程后可以释放大量的内存。
  如果设置为非零值,OOM killer只会简单地将触发OOM的进程杀死,避免遍历进程列表(代价比较大)。
  如果panic_on_oom被设置,则会忽略oom_kill_allocating_task的值。
  默认值是0。
0
[root@rk:/proc/sys/vm]# cat watermark_scale_factor    调整内核在计算内存水位线时考虑的“内存压力”因素的比例。
内存水位线是内核用于判断是否需要触发内存回收的阈值。当系统内存紧张时,内核将调整水位线,并启动内存回收机制以释放内存并避免系统内存资源耗尽。内核根据多个因素来计算水位线,其中之一就是“内存压力”。
watermark_scale_factor 是一个浮点数,默认值为1.0。它决定了内核在计算水位线时将“内存压力”因素乘以多少。较大的值将增加内存压力对水位线的影响,使内核更敏感地触发内存回收。较小的值则减少内存压力对水位线的影响,使内核更少地触发内存回收。
调整 watermark_scale_factor 的值可以根据系统的需求来平衡内存利用率和系统的响应性能。较大的值适用于对内存利用率敏感的系统,例如服务器;而较小的值适用于对系统响应性能敏感的系统,例如桌面计算机或移动设备。
值得注意的是,调整 watermark_scale_factor 需要慎重,因为过高或过低的值可能导致系统的性能问题或内存资源管理不足。建议在根据实际情况进行调整之前,先进行充分的测试和评估。
10
[root@rk:/proc/sys/vm]#


原文地址:https://blog.csdn.net/cainiao2013/article/details/143018645

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!