- 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:
- memory.use_hierarchy
包含指定是否应将内存用量计入 cgroup 层级的吞吐量的标签(0
或者 1
)。如果启用(1
),内存子系统会从超过其内存限制的子进程中再生内存。默认情况(0
)是子系统不从任务的子进程中再生内存。