4.6. Informações Específicas do Red Hat Enterprise Linux

Devido à complexidade inerente de um sistema operacional com memória virtual de páginas sob demanda, monitorar os recursos relacionados à memória sob o Red Hat Enterprise Linux pode ser confuso. Consequentemente, é melhor começar pelas ferramentas mais simples e seguir adiante.

Usando o free, é possível obter uma visão geral concisa (e de certa maneira simplista) da utilização da memória e de swap. Veja aqui um exemplo:

             total       used       free     shared    buffers     cached
Mem:       1288720     361448     927272          0      27844     187632
-/+ buffers/cache:     145972    1142748
Swap:       522104          0     522104
      

Nós percebemos que este sistema tem 1.2GB de RAM, dos quais somente 350MB estão em uso. Como esperado num sistema com tanta memória RAM livre, nenhuma das partições swap de 500MB está em uso.

Contraste aquele exemplo com esse:

             total       used       free     shared    buffers     cached
Mem:        255088     246604       8484          0       6492     111320
-/+ buffers/cache:     128792     126296
Swap:       530136     111308     418828
      

Esse sistema tem em torno de 256MB de RAM e a maioria está em uso, deixando apenas 8MB livres. Mais de 100MB da partição swap de 500MB estão em uso. Apesar desse sistema ser mais limitado que o primeiro em termos de memória, temos que investigar um pouco mais para saber se esta limitação de memória está causando problemas de desempenho.

Apesar de ser mais secreto que o free, o vmstat tem o benefício de apresentar mais que apenas estatísticas de utilização da memória. Aqui está o output de vmstat 1 10:

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 2  0  0 111304   9728   7036 107204   0   0     6    10  120    24  10   2  89
 2  0  0 111304   9728   7036 107204   0   0     0     0  526  1653  96   4   0
 1  0  0 111304   9616   7036 107204   0   0     0     0  552  2219  94   5   1
 1  0  0 111304   9616   7036 107204   0   0     0     0  624   699  98   2   0
 2  0  0 111304   9616   7052 107204   0   0     0    48  603  1466  95   5   0
 3  0  0 111304   9620   7052 107204   0   0     0     0  768   932  90   4   6
 3  0  0 111304   9440   7076 107360  92   0   244     0  820  1230  85   9   6
 2  0  0 111304   9276   7076 107368   0   0     0     0  832  1060  87   6   7
 3  0  0 111304   9624   7092 107372   0   0    16     0  813  1655  93   5   2
 2  0  2 111304   9624   7108 107372   0   0     0   972 1189  1165  68   9  23
      

Durante essa amostra de 10 segundos, a quantidade de memória livre (o campo free) varia ligeiramente, e há um pouco de I/O relacionada a swap (os campos si e so), mas, no geral, esse sistema está funcionando bem. No entanto, é duvidoso o quanto de trabalho adicional pode suportar, dada a utilização de memória corrente.

Quando pesquisamos questões relativas à memória, frequentemente é necessário determinar como o sub-sistema de memória virtual do Red Hat Enterprise Linux está usando a memória do sistema. Ao usar o sar, é possível examinar o aspecto do desempenho do sistema em mais detalhes.

Ao rever o relatório do sar -r, podemos examinar a utilização da memória e de swap mais de perto:

Linux 2.4.20-1.1931.2.231.2.10.ent (pigdog.example.com)      07/22/2003

12:00:01 AM kbmemfree kbmemused  %memused kbmemshrd kbbuffers  kbcached
12:10:00 AM    240468   1048252     81.34         0    133724    485772
12:20:00 AM    240508   1048212     81.34         0    134172    485600
…
08:40:00 PM    934132    354588     27.51         0     26080    185364
Average:       324346    964374     74.83         0     96072    467559
      

Os campos kbmemfree e kbmemused exibem as estatísticas típicas de memória usada e memória livre, com a porcentagem de memória utilizada exibida no campo %memused. Os campos kbbuffers e kbcached mostram quantos kilobytes de memória estão alocadas para buffers e para o cache de dados do sistema todo.

O campo kbmemshrd é sempre zero para sistemas usando o kernel 2.4 do Linux (como o Red Hat Enterprise Linux).

As linhas deste relatório foram quebradas para caber na página. Aqui está o restante de cada linha, com o timestamp adicionado à esquerda para facilitar a leitura:

12:00:01 AM   kbswpfree kbswpused  %swpused
12:10:00 AM      522104         0      0.00
12:20:00 AM      522104         0      0.00
…
08:40:00 PM      522104         0      0.00
Average:         522104         0      0.00
      

Para a utilização da memória swap, os campos kbswpfree e kbswpused exibem as quantidades de swap livre e de espaço swap usado, em kilobytes, com o campo %swpused exibindo o espaço swap utilizado em porcentagem.

Para aprender mais sobre a atividade de swapping ocorrendo, use o relatório sar -W. Aqui está um exemplo:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pswpin/s pswpout/s
12:10:01 AM      0.15      2.56
12:20:00 AM      0.00      0.00
…
03:30:01 PM      0.42      2.56
Average:         0.11      0.37
      

Percebemos aqui que, em média, houve três vezes menos páginas trazidas de swap (pswpin/s) que páginas indo para swap (pswpout/s).

Para entender melhor como as páginas estão sendo usadas, consulte o relatório sar -B:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pgpgin/s pgpgout/s  activepg  inadtypg  inaclnpg  inatarpg
12:10:00 AM      0.03      8.61    195393     20654     30352     49279
12:20:00 AM      0.01      7.51    195385     20655     30336     49275
…
08:40:00 PM      0.00      7.79     71236      1371      6760     15873
Average:       201.54    201.54    169367     18999     35146     44702
      

Aqui podemos determinar quantos blocos por segundo são paginados do (paged in) disco (pgpgin/s) e paginados para o (paged out) disco (pgpgout/s). Estas estatísticas servem como um barômetro da atividade geral da memória virtual.

Entretanto, pode-se obter mais conhecimento ao examinar os outros campos deste relatório. O kernel do Red Hat Enterprise Linux marca todas as páginas como ativas ou inativas. Como o nome implica, as páginas ativas estão em uso corrente de alguma forma (como processos ou páginas de buffer, por exemplo), enquanto as páginas inativas não estão. Este relatório-exemplo mostra que a lista de páginas ativas (o campo activepg) tem, em média, aproximadamente 660MB[1].

Os campos restantes deste relatório concentram-se na lista inativa — páginas que, por alguma razão, não foram utilizadas recentemente. O campo inadtypg mostra quantas páginas inativas estão sujas (alteradas) e talvez precisem ser gravadas no disco. O campo inaclnpg, por outro lado, mostra quantas páginas inativas estão limpas (inalteradas) e não precisam ser gravadas no disco.

O campo inatarpg representa o tamanho desejado da lista inativa. Esse valor é calculado pelo kernel do Linux e é dimensionado de tal forma que a lista inativa continua grande o suficiente para atuar como um pool de substituição de páginas.

Para mais dicas sobre o status de páginas (especificamente, a frequência de alteração de status), use o relatório sar -R. Aqui está uma amostra:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM   frmpg/s   shmpg/s   bufpg/s   campg/s
12:10:00 AM     -0.10      0.00      0.12     -0.07
12:20:00 AM      0.02      0.00      0.19     -0.07
…
08:50:01 PM     -3.19      0.00      0.46      0.81
Average:         0.01      0.00     -0.00     -0.00
      

As estatísticas deste relatório sar específico são únicas, pois podem ser positivas, negativas ou zero. Quando positivas, o valor indica a frequência com a qual as páginas desse tipo estão aumentando. Quando negativas, o valor indica a frequência com a qual as páginas desse tipo estão diminuindo. O valor zero indica que páginas desse tipo não estão aumentando nem diminuindo.

Nesse exemplo, a última amostra exibe um pouco mais de três páginas por segundo sendo alocadas da lista de páginas livres (o campo frmpg/s) e aproximadamente uma página por segundo sendo adicionada ao cache de páginas (o campo campg/s). A lista de páginas usadas como buffers (o campo bufpg/s) ganhou aproximadamente uma página a cada dois segundos, enquanto a lista de páginas da memória compartilhada (o campo shmpg/s) não ganhou nem perdeu páginas.

Notas

[1]

O tamanho de página sob o Red Hat Enterprise Linux no sistema x86 usado neste exemplo é 4096 bytes. Sistemas baseados em outras arquiteturas podem ter tamanhos de página diferentes.