Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
3.7. memory
memory
子系统自动生成 cgroup 中任务使用的内存资源报告,并设定由那些任务使用的内存限制:
- memory.stat
- 报告大范围内存统计,如下表所述:
表 3.1. memory.stat 报告的值
统计 描述 cache
页缓存,包括 tmpfs
(shmem
),单位为字节rss
匿名和 swap 缓存,不包括 tmpfs
(shmem
),单位为字节mapped_file
memory-mapped 映射的文件大小,包括 tmpfs
(shmem
),单位为字节pgpgin
存入内存中的页数 pgpgout
从内存中读出的页数 swap
swap 用量,单位为字节 active_anon
在活跃的最近最少使用(least-recently-used,LRU)列表中的匿名和 swap 缓存,包括 tmpfs
(shmem
),单位为字节inactive_anon
不活跃的 LRU 列表中的匿名和 swap 缓存,包括 tmpfs
(shmem
),单位为字节active_file
活跃 LRU 列表中的 file-backed 内存,以字节为单位 inactive_file
不活跃 LRU 列表中的 file-backed 内存,以字节为单位 unevictable
无法再生的内存,以字节为单位 hierarchical_memory_limit
包含 memory
cgroup 的层级的内存限制,单位为字节hierarchical_memsw_limit
包含 memory
cgroup 的层级的内存加 swap 限制,单位为字节另外,这些文件除hierarchical_memory_limit
和hierarchical_memsw_limit
之外,都有一个对应前缀total
,它不仅可在该 cgroup 中报告,还可在其下级 cgroup 中报告。例如:swap
报告 cgroup 的 swap 用量,total_swap
报告该 cgroup 及其所有子组群的 swap 用量总和。当您解读memory.stat
报告的数值时,请注意各个统计数据之间的关系:active_anon
+inactive_anon
= 匿名内存 +tmpfs
的文件缓存 + swap 缓存因此,active_anon
+inactive_anon
≠rss
,因为rss
不包括tmpfs
。active_file
+inactive_file
= 缓存减去tmpfs
大小
- memory.usage_in_bytes
- 报告该 cgroup中进程使用的当前总内存用量(以字节为单位)。
- memory.memsw.usage_in_bytes
- 报告该 cgroup 中进程使用的当前内存用量和 swap 空间总和(以字节为单位)。
- memory.max_usage_in_bytes
- 报告该 cgroup 中进程使用的最大内存用量(以字节为单位)。
- memory.memsw.max_usage_in_bytes
- 报告该 cgroup 中进程使用的最大内存用量和 swap 空间用量(以字节为单位)。
- memory.limit_in_bytes
- 设定用户内存的最大量(包括文件缓存)。如果没有指定单位,则将该数值理解为字节。但是可以使用前缀代表更大的单位 -
k
或者K
代表千字节,m
或者M
代表 MB,g
或者G
代表 GB。您不能使用memory.limit_in_bytes
限制 root cgroup;您只能在该层级中较低的组群中应用这些值。在memory.limit_in_bytes
中写入-1
删除现有限制。 - memory.memsw.limit_in_bytes
- 设定最大内存与 swap 用量之和。如果没有指定单位,则将该值解读为字节。但是可以使用前缀代表更大的单位 -
k
或者K
代表千字节,m
或者M
代表 MB,g
或者G
代表 GB。您不能使用memory.memsw.limit_in_bytes
限制 root cgroup;您只能在该层级中较低的组群中应用这些值。在memory.memsw.limit_in_bytes
中写入-1
删除现有限制。 - memory.failcnt
- 报告内存达到在
memory.limit_in_bytes
设定的限制值的次数。 - memory.memsw.failcnt
- 报告内存加 swap 空间限制达到在
memory.memsw.limit_in_bytes
设定的值的次数。 - memory.force_empty
- 当设定为
0
时,会清空这个 cgroup 中任务所使用的所有页面的内存。这个接口只可在 cgroup 中没有任务时使用。如果无法清空内存,则在可能的情况下将其移动到上级 cgroup 中。删除 cgroup 前请使用memory.force_empty
以避免将不再使用的页面缓存移动到它的上级 cgroup 中。 - memory.swappiness
- 将内核倾向设定为换出这个 cgroup 中任务所使用的进程内存,而不是从页缓冲中再生页面。这也是在
/proc/sys/vm/swappiness
中设定的使用同一方法为整个系统设定的内核倾向。默认值为60
。低于这个值会降低内核换出进程内存的倾向,将其设定为0
则完全不会为 cgroup 中的任务换出进程内存。高于这个值将提高内核换出进程内存的倾向,大于100
时内核将开始换出作为这个 cgroup 中进程的地址空间一部分的页面。请注意那个值为0
不会阻止换出进程内存;系统缺少内存时仍可能发生换出内存,这是因为全局虚拟内存管理逻辑不读取该 cgroup 值。要完全锁定页面,请使用mlock()
而不时 cgroup。您不能更改以下组群的 swappiness:- root cgroup,它使用在
/proc/sys/vm/swappiness
中设定的 swappiness。 - 有属于它的子组群的 cgroup。
- memory.use_hierarchy
- 包含指定是否应将内存用量计入 cgroup 层级的吞吐量的标签(
0
或者1
)。如果启用(1
),内存子系统会从超过其内存限制的子进程中再生内存。默认情况(0
)是子系统不从任务的子进程中再生内存。