- memory.stat
다음 표에서 볼 수 있듯이 광범위한 메모리 통계를 보고합니다:
표 3.1. 메모리 통계가 보고하는 값들 통계 | 설명 |
---|
cache | tmpfs (shmem )를 포함하는 페이지 캐시 (바이트 단위) |
rss | tmpfs (shmem )를 포함하지 않는 익명 스왑 캐시 (바이트 단위) |
mapped_file | tmpfs (shmem )를 포함한 메모리 맵핑된 파일의 크기 (바이트 단위) |
pgpgin | 메모리에 페이지된 페이지 갯수 |
pgpgout | 메모리에서 페이지아웃된 페이지 갯수 |
swap | 스왑 사용량 (바이트 단위) |
active_anon | tmpfs (shmem )를 포함한 활성화된 최근 최소 사용(LRU,least-recently-used) 목록에 있는 무명/스왑 캐시 (바이트 단위) |
inactive_anon | tmpfs (shmem )를 포함한 비활성 LRU 목록에서 익명의 스왑 캐시 (바이트 단위) |
active_file | 활성화된 LRU 목록에 있는 파일 기반 메모리(바이트 단위) |
inactive_file | 비활성화된 LRU 목록에 있는 파일기반 메모리 (바이트 단위) |
unevictable | 재활용할 수 없는 메모리 (바이트 단위) |
hierarchical_memory_limit | memory cgroup을 포함하는 계층의 메모리 제한 (바이트 단위) |
hierarchical_memsw_limit | memory cgroup을 포함하는 계층의 메모리와 스왑 제한 (바이트 단위) |
또한 hierarchical_memory_limit
및 hierarchical_memsw_limit
이외의 파일은 각각 cgroup 뿐만 아니라 모든 자식 그룹에도 보고하는 total_
접두사를 갖습니다. 예들 들어, swap
은 cgroup에 의한 스왑 사용량을 보고하고 total_swap
은 cgroup과 자식 그룹에 의한 총 스왑 사용량을 보고합니다.
memory.stat
에 의해 보고된 값을 구문 분석할 때 다향한 통계가 서로 관련되어 있다는 점에 유의하십시오:
active_anon
+ inactive_anon
= 익명 메모리 + tmpfs
파일 캐시 + 스왑 캐시
따라서 active_anon
+ inactive_anon
≠ rss
가 됩니다. 이는 rss
에는 tmpfs
가 포함되지 않기 때문입니다.
active_file
+ inactive_file
= cache - size of tmpfs
- memory.usage_in_bytes
cgroup에서 프로세스에 의해 현재 사용되는 전체 메모리 사용량을 보고합니다 (바이트 단위).
- memory.memsw.usage_in_bytes
cgroup에서 프로세스에 의해 사용되는 현재 메모리 사용량과 스왑 영역 사용량의 합계를 보고합니다 (바이트 단위).
- memory.max_usage_in_bytes
cgroup에서 프로세스에 의한 최대 메모리 사용량을 보고합니다 (바이트단위).
- memory.memsw.max_usage_in_bytes
cgroup에서 프로세스에 의해 사용된 스왑 영역 및 최대 메모리 사용량을 보고합니다 (바이트 단위).
- memory.limit_in_bytes
최대 사용자 메모리양 (파일 캐시 포함)을 설정합니다. 단위가 지정되어 있지 않으면 값은 바이트 단위로 해석됩니다. 하지만, 더 큰 단위를 숫자 뒤에 사용할 수 도 있습니다. k
,K
는 킬로바이트, m
,M
는 메가바이트, g
,G
는 기가바이트를 의미합니다.
root cgroup을 제한하기 위해 memory.limit_in_bytes
는 사용할 수 없습니다. 계층에 있는 하위 그룹에만 값을 적용할 수 있습니다.
memory.limit_in_bytes
에 -1
을 작성하여 기존 제한을 제거합니다.
- memory.memsw.limit_in_bytes
총 메모리와 스왑 사용량의 최대 크기를 지정합니다. 단위를 지정하지 않으면 값은 바이트 단위로 해석됩니다. 하지만 더 큰 단위를 숫자 뒤에 사용할 수 있습니다. k
,K
는 킬로바이트, m
,M
는 메가바이트, g
,G
은 기가바이트를 의미합니다.
root cgroup을 제한하기 위해 memory.memsw.limit_in_bytes
는 사용할 수 없습니다. 계층에 있는 하위 그룹에만 값을 적용할 수 있습니다.
memory.memsw.limit_in_bytes
에 -1
로 작성하여 기존 제한을 제거합니다.
- memory.failcnt
memory.limit_in_bytes
로 설정된 메모리 제한에 도달한 횟수를 보고합니다.
- memory.memsw.failcnt
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
입니다. 이 값보다 더 낮은 값으로 지정하면 커널이 프로세스 메모리를 스왑아웃 하는 경향을 감소시키고, 60
보다 더 높은 값으로 지정하면 커널이 프로세스 메모리를 스왑 아웃하는 경향을 증가시킵니다. 100
보다 더 큰 값을 지정하면, 이 cgroup에 속한 프로세스의 주소 공간에 있는 페이지들을 커널이 스왑 아웃하는 것을 허용합니다.
0
의 값으로 설정하면 프로세스 메모리가 스왑 아웃되는 것을 막을 수 없다는 점에 유의하십시오. 글로벌 가상 메모리 관리 논리는 cgroup 값을 읽지 않기 때문에 시스템 메모리가 부족한 경우 여전히 스왑 아웃이 발생할 수 있습니다. 페이지를 완전히 잠금하려면 cgroup 대신 mlock()
을 사용합니다.
다음과 같은 그룹의 swappiness는 변경할 수 없습니다:
- memory.use_hierarchy
cgroup의 계층구조 전체에 대해 메모리 사용량이 계산되어야 할지를 지정하는 플래그(0
또는 1
)가 포함됩니다. 만약 활성화되면(1
로 지정), 메모리 서브시스템은 메모리 제한을 넘어간 프로세스와 그 자식 프로세스로부터 메모리를 재활용하게 됩니다. 디폴트값(0
)에서 서브시스템은 작업의 자식에서 메모리를 재활용하지 않습니다.