Como entender o uso da memória e a média de carga no servidor linux

57

Estou usando um servidor linux que possui 128 GB de memória e 24 núcleos. Eu uso top para ver quanto é usado. Sua saída é colada no final da postagem. Aqui estão duas perguntas:

(1) Vejo que cada um dos processos em execução ocupa uma porcentagem muito pequena de memória (% MEM não superior a 0,2% e, no máximo, apenas 0,0%), mas como a memória total é quase usada como na quarta linha de saída ( "Mem: 130766620k total, 130161072k usado, 605548k livre, 919300k buffers")? É improvável que a soma da porcentagem de memória usada em todos os processos atinja quase 100%, não é?

(2) como entender a média de carga na primeira linha ("média de carga: 14.04, 14.02, 14.00")?

Obrigado e cumprimentos!

Editar:

Obrigado!

Também gosto muito de ouvir alguns números aproximados, com base na porcentagem de memória usada para determinar se um servidor está muito carregado, desde que me tornei aquele que amontoou o servidor sem entender a carga atual.

A troca é considerada quase igual à memória? Por exemplo, quando a memória e a troca são quase do mesmo tamanho, se a memória está quase acabando, mas a troca ainda é amplamente livre, posso vê-la como se a porcentagem usada de memória + troca ainda não estivesse alta e executasse outras novas processos?

Como você consideraria o uso da CPU ou da memória (ou memória + troca)? Você fica preocupado se um deles chega muito alto ou ambos?

Saída do topo :

$ top

 
top - 12:45:33 até 19 dias, 23:11, 18 usuários, média de carga: 14.04, 14.02, 14.00
Tarefas: 484 total, 12 em execução, 472 em sono, 0 parado, 0 zumbi
Processador (es): 36.7% us, 19.7% sy, 0.0% ni, 43.6% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0% st
Mem: 130766620k total, 130161072k usado, 605548k livre, 919300k buffers
Troca: 63111312k total, 500556k usado, 62610756k grátis, 124437752k em cache

  PID USER PR NI VIRT RES SHR% CPU% MEM TIME + COMMAND
 6529 sanchez 18 -2 1075m 219m 13m S 100 0.2 13760: 23 MATLAB
13210 timothy 18 -2 48336 37m 1216 R 100 0,0 3: 56,75 absurdo
13888 timothy 18 -2 48336 37m 1204 R 100 0.0 2: 04.89 absurdo
14542 timothy 18 -2 48336 37m 1196 R 100 0.0 1: 08.34 absurdo
14544 timothy 18 -2 2888 2076 400 R 100 0,0 1: 06.14 gatherData
 6183 sanchez 18 -2 1133m 195m 13m S 100 0,2 13676: 04 MATLAB
 6795 sanchez 18 -2 1079m 210m 13m S 100 0,2 13734: 26 MATLAB
10178 timothy 18 -2 48336 37m 1204 R 100 0,0 11: 33,93 absurdo 
12438 timothy 18 -2 48336 37m 1216 R 100 0,0 5: 38,17 absurdo
13661 timothy 18 -2 48336 37m 1216 R 100 0.0 2: 44.13 absurdo
14098 timóteo 18 -2 48336 37m 1204 R 100 0,0 1: 58,31 absurdo
14335 timothy 18 -2 48336 37m 1196 R 100 0.0 1: 08.93 absurdo
14765 timothy 18 -2 48336 37m 1196 R 99 0.0 0: 32.57 absurdo
13445 timóteo 18 -2 48336 37m 1216 R 99 0,0 3: 01.37 absurdo
28990 root 20 0 0 0 0 S 2 0.0 65: 50.21 pdflush
12141 tim 18 -2 19380 1660 1024 R 1 0,0 0: 04.04 topo
 1240 raiz 15 -5 0 0 0 S 0 0,0 16: 07.11
 9019 raiz 20 0 296m 4460 2616 S 0 0,0 82: 19,51 kdm_greet
    1 raiz 20 0 4028 728 592 S 0 0,0 0: 03.11 init
    2 raiz 15 -5 0 0 0 S 0 0.0 0: 00.00 kthreadd
    3 raiz RT -5 0 0 0 S 0 0.0 0: 01.01 migração / 0
    4 raiz 15 -5 0 0 0 S 0 0.0 0: 08.13 ksoftirqd / 0
    5 raiz RT -5 0 0 0 S 0 0.0 0: 00.00 watchdog / 0
    RT 6 raiz -5 0 0 0 S 0 0.0 17: 27.31 migração / 1
    7 raiz 15 -5 0 0 0 S 0 0.0 0: 01.21 ksoftirqd / 1
    8 raiz RT -5 0 0 0 S 0 0.0 0: 00.00 watchdog / 1
    9 raiz RT -5 0 0 0 S 0 0.0 10: 02.56 migração / 2
   10 raiz 15 -5 0 0 0 S 0 0.0 0: 00.34 ksoftirqd / 2
   11 raiz RT -5 0 0 0 S 0 0.0 0: 00.00 watchdog / 2
   12 raiz RT -5 0 0 0 S 0 0.0 4: 29.53 migração / 3
   13 raiz 15 -5 0 0 0 S 0 0.0 0: 00.34 ksoftirqd / 3
Tim
fonte
2
Veja isso para uma boa resposta sobre memória. serverfault.com/questions/38065/#38074
Zoredache
E esta resposta para um resumo rápido sobre a média de carga (ou esta longa leitura para obter detalhes).
Nickolay 12/09

Respostas:

56

(1) Vejo que cada um dos processos em execução ocupa uma porcentagem muito pequena de memória (% MEM não superior a 0,2% e, no máximo, apenas 0,0%), mas como a memória total é quase usada como na quarta linha de saída ( "Mem: 130766620k total, 130161072k usado, 605548k livre, 919300k buffers")? É improvável que a soma da porcentagem de memória usada em todos os processos atinja quase 100%, não é?

Para ver quanta memória você está usando no momento, execute free -m. Fornecerá saída como:

             total de buffers compartilhados gratuitos usados ​​em cache
Mem: 2012 1923 88 0 91 515
- / + buffers / cache: 1316695
Trocar: 3153 256 2896

O valor da linha superior 'usado' (1923) quase sempre corresponde quase ao valor da memória da linha superior (2012). Como o Linux gosta de usar qualquer memória sobressalente para armazenar em cache os blocos de disco (515).

A figura-chave usada para examinar é o valor usado da linha de buffers / cache (1316). É quanto espaço seus aplicativos estão usando no momento. Para um melhor desempenho, esse número deve ser menor que a memória total (2012). Para evitar erros de falta de memória, ele precisa ser menor que a memória total (2012) e trocar espaço (3153).

Se você deseja ver rapidamente quanta memória está livre, consulte o valor livre de linha de buffers / cache (695). Esta é a memória total (2012) - a real usada (1316). (2012 - 1316 = 696, não 695, isso será apenas uma questão de arredondamento)

(2) como entender a média de carga na primeira linha ("média de carga: 14.04, 14.02, 14.00")?

Este artigo sobre carga média usa uma boa analogia de tráfego e é a melhor que eu encontrei até agora: Entendendo a carga de CPU do Linux - quando você deve se preocupar? . No seu caso, como as pessoas apontaram:

No sistema multiprocessador, a carga é relativa ao número de núcleos de processador disponíveis. A marca "100% de utilização" é 1,00 em um sistema de núcleo único, 2,00 em um núcleo duplo, 4,00 em um núcleo quádruplo, etc.

Portanto, com uma média de carga de 14,00 e 24 núcleos, seu servidor está longe de ser sobrecarregado.

Pascal Thivent
fonte
17

Sistemas tipo Unix, incluindo Linux, são projetados para fazer o uso mais eficiente possível da RAM disponível. Em termos muito gerais, existem 3 estados em que cada MB de RAM pode estar:

  1. Livre
  2. Usado por um processo
  3. Usado para buffers

O terceiro estado é usado apenas como espaço de trabalho e deve ser reatribuído sempre que necessário, ou seja, sua memória total disponível para programas é realmente Free + UsedforBuffers. Como tal, você realmente não verá o espaço alocado do buffer aparecendo como atribuído a qualquer processo específico.

Sua pergunta sobre a média de carga é um pouco mais interessante, pois pode ser facilmente mal interpretada. Para a história completa, consulte este artigo do linuxjournal . O melhor resumo é uma citação direta do artigo,

O cálculo da média de carga é pensado como uma média móvel de processos na fila de execução do Linux marcada como em execução ou ininterrupta

Ou seja, você pode pensar em sua média de carga como (número de processos em execução) + (número de processos aguardando IO). Tendo em mente que a qualquer momento você pode ter o número de processos $ CORE em execução, eu diria que sua média de carga de 14 é muito baixa.

Scott Pack
fonte
Obrigado! Qual é a porcentagem de memória usada (ou memória + troca) considerada pesada e melhor para não executar novos processos? Você vê a memória ou a memória + swap? A troca usada é mostrada na parte superior, o tamanho da troca realmente usado? Em relação à média de carga da CPU, você mede a carga real por "média de carga / número principal"? Quanto você considera que o servidor está muito carregado? Obrigado e cumprimentos!
Tim
2
A carga é apenas um indicador. Como regra geral, uma carga maior que núcleos é uma coisa ruim. Geralmente, uma alta porcentagem de memória usada é uma coisa ruim. Não é um valor binário que você possa dizer 'isso é bom'. Se você ficar sem memória RAM, não terá o suficiente para executar mais processos. Se você não ficar sem, terá bastante. É muito dependente das especificidades da sua situação.
Cian
4

Na sarpágina do manual:

       A média da carga é calculada como o número médio de unidades executáveis ​​ou 
       tarefas em execução (estado R) e o número de tarefas ininterruptas
       sleep (estado D) durante o intervalo especificado.

Na uptimepágina do manual:

       As médias de carga do sistema são o número médio de processos que são
       em um estado executável ou ininterrupto. Um processo em um estado executável
       está usando a CPU ou aguardando para usá-la. Um processo em
       estado de interrupção está aguardando algum acesso de E / S, por exemplo, aguardando disco.
       As médias são calculadas ao longo dos três intervalos de tempo. Médias de carga
       não são normalizados para o número de CPUs em um sistema; portanto, uma carga média
       idade de 1 significa que um único sistema de CPU é carregado o tempo todo enquanto
       Sistema de CPU significa que ficou ocioso 75% do tempo.
Dennis Williamson
fonte
3
  1. O Linux, há algum tempo, gerencia sua memória de uma maneira que torna essa linha topbasicamente inútil, geralmente mantendo a maior parte da memória da máquina alocada para vários usos quando não é exigida pelo processo do usuário.
  2. A média de carga é o número médio de processos em execução ou aguardando execução. Geralmente, ele tem uma forte correlação negativa com a latência / capacidade de resposta do sistema, portanto, você o deseja o mais baixo possível. Porém, como cada uma das suas CPUs pode estar executando algo a qualquer momento, você parece estar indo muito bem aos 14 anos.
caos
fonte
Obrigado! Em relação a 1, você quer dizer que alguns processos não aparecem no topo, mas estão usando muita memória? Ou que a quarta linha de saída sobre memória ("Mem: 130766620k total, 130161072k usada, 605548k livre, 919300k buffers") é enganosa, devo olhar para a soma da porcentagem de memória usada por todos os processos mostrados na parte superior e no meu caso Posso executar com segurança alguns novos processos que consomem memória?
Tim
2
Como outras respostas apontaram, a média de carga deve ser comparada com o número de processadores; portanto, 14 não é tanto em um sistema de 24 núcleos. Seria como 14/24 = 0,58 em um sistema de núcleo único (bem mais ou menos).
David Z
@ Tim: quero dizer o último.
caos