Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

3.7. memory

O subsistema memory gera relatórios automáticos sobre recursos de memórias usados pelas tarefas em um cgroups e define limites em uso de memória por estas tarefas:
memory.stat
reporta um ampla classe de estatísticas de memória, conforme descrito na tabela:

Tabela 3.1. Valores reportados pela memory.stat

Estatística Descrição
cache cache de página, incluindo tmpfs (shmem), em bytes
rss anônimo e cache de troca, não inclui o tmpfs (shmem), em bytes
mapped_file tamanho dos arquivos mapeados da memória mapeada, incluindo tmpfs (shmem), em bytes
pgpgin números de páginas paginadas na memória
pgpgout número de páginas paginadas fora da memória
swap o uso de troca (swap), em bytes
active_anon anônimo e cache de troca (swap) na lista dos usados recentemente (LRU) ativa, incluindo tmpfs (shmem), em bytes
inactive_anon anônimo e cache de troca na lista LRU inativa, incluindo o tmpfs (shmem), em bytes
active_file memória de back up de arquivo na lista LRU ativa, em bytes
inactive_file memória de back up de arquivo na lista LRU inativa, em bytes
unevictable memória que não pode ser recuperada, em bytes
hierarchical_memory_limit limite de memória para a hierarquia que contem o cgroup memory, em bytes
hierarchical_memsw_limit memória mais o limite de troca para a hierarquia que contém o cgroup memory, em bytes
Adicionalmente, cada um destes arquivos que não são o hierarchical_memory_limit e o hierarchical_memsw_limit possui um duplicado pré fixado total_ que reporta não somente no cgroup mas também em todos os filhos. Por exemplo, o swap reporta o uso de troca por um cgroup e o total_swap reporta o uso de troca total por um cgroup e todos seus filhos.
Quando você interpretar os valores reportados pelo memory.stat, observe que várias estatísticas são inter relacionadas:
  • active_anon + inactive_anon = anonymous memory + file cache for tmpfs + swap cache
    Portanto o active_anon + inactive_anonrss, porque o rss não inclui o tmpfs.
  • active_file + inactive_file = cache - size of tmpfs
memory.usage_in_bytes
reporta uso de memória atual total pelos processos nos cgroups (em bytes).
memory.memsw.usage_in_bytes
reporta a soma do uso atual de memória mais o espaço de troca usado por processos no cgroup (em bytes).
memory.max_usage_in_bytes
reporta o máximo de memória usada por processos nos cgroups (em bytes)
memory.memsw.max_usage_in_bytes
reporta a quantidade máxima de memória e de espaço troca usados pelos processos no cgroup (em bytes).
memory.limit_in_bytes
define a quantia máxima de memória de sistema (incluindo arquivo de cache). Se nenhuma unidade é especificada, o valor é interpretado como bytes. Entretanto, é possível usar sufixos para representar unidades maiores — k ou K para kilobytes, m ou M para Megabytes, e g ou G para Gigabytes.
Você não usar o memory.limit_in_bytes para limitar o cgroup root; você pode somente aplicar valores nos cgroups abaixo na hierarquia.
Digite -1 para o memory.limit_in_bytes para remover quaisquer limites existentes.
memory.memsw.limit_in_bytes
define a quantia máxima para a soma de memória e uso de troca. Se nenhuma unidade for especificada, o valor é interpretado como bytes. No entanto, é possível usar sufixos para representar unidades maiores — k ou K para kilobytes, m ou M para Megabytes, e g ou G para Gigabytes.
Você não pode usar o memory.memsw.limit_in_bytes para limitar o cgrupo root; você pode somente aplicar valores a grupos abaixo na hierarquia.
Digite -1 para o memory.memsw.limit_in_bytes para remover quaisquer limites existentes.
memory.failcnt
reporta o número de vezes que o limite de memória excedeu o valor definido no memory.limit_in_bytes.
memory.memsw.failcnt
reporta o número de vezes que a memória mais limite de espaço de troca alcançou o valor definido no memory.memsw.limit_in_bytes.
memory.force_empty
quando definido para 0, esvazia a memória de todas as páginas usadas pelas tarefas neste cgroup. Esta interface pode ser usada somente quando o cgroup não possuir nenhuma tarefa. Se a memória não puder ser liberada, ela é movida para um cgroup pai se possível. Use o memory.force_empty antes de remover um cgroup para evitar páginas de cache fora de uso para o seu cgroup pai.
memory.swappiness
define a tendência do kernel para permutar memória de processo usada por tarefas neste cgroup ao invés de requerer páginas do cache de páginas. Esta é a mesma tendência, calculada da mesma forma, que o conjunto em /proc/sys/vm/swappiness para o sistema como um todo. O valor padrão é 60. Valores mais baixos do que este diminuirão a tendência do kernel de permutar a memória do processo, e valores maiores que 60 aumentam a tendência do kernel de permutar a memória do processo e valores maiores que 100 permitem ao kernel permutar páginas que são parte do espaço de endereço dos processos neste cgroup.
Observe que o valor 0 não previne memória de processo a ser permutada; a permuta ainda acontece quando há escassez de memória do sistema porque o gerenciador lógico de memória virtual global não lê o valor do cgroup. Para bloquear páginas completamente, use o mlock() em vez de grupos.
Você não pode mudar a permuta dos seguintes grupos:
  • o cgroup root, que usa a permuta definida em /proc/sys/vm/swappiness.
  • um cgroup que tem um grupo filho abaixo dele.
memory.use_hierarchy
contém um sinalizador (0 ou 1) que especifica se o uso de memória deve ser contado por toda uma hierarquia de cgroups. Se ativado (1) o subsistema de memória requererá memória do processo filho que exceda seu limite de memória. Por padrão (o), o subsistema não requer memória para uma tarefa de um filho.