AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1444396
Accepted
Artur Meinild
Artur Meinild
Asked: 2022-12-08 01:27:12 +0800 CST2022-12-08 01:27:12 +0800 CST 2022-12-08 01:27:12 +0800 CST

Como posso calcular corretamente a soma da memória usada por todos os processos?

  • 772

Recentemente, houve algumas perguntas perguntando por que o Ubuntu aparentemente está usando mais memória do que o contabilizado por processos/serviços - aqui e aqui .

No entanto, eu tenho a situação exatamente oposta. No meu servidor, a memória usada por todos os processos parece ser maior que a memória total usada. Deixe-me fornecer as evidências.

Saída de free -m:

               total        used        free      shared  buff/cache   available
Mem:           64277       15014       34424          31       14837       48530
Swap:           8191           0        8191

Saída de arcstat:

    time  read  miss  miss%  dmis  dm%  pmis  pm%  mmis  mm%  size     c  avail
09:38:57     0     0      0     0    0     0    0     0    0  9.8G  9.8G    41G

Saída de ps aux | awk '{sum +=$6}END{print sum}':

6351512

Então, o que isso significa para mim é:

free -mrelata um total de 15,0 GB de memória usada (a memória compartilhada é insignificante). Subtraia desses 9,8 GB relatados por arcstatpara ZFS ARC Cache. O resultado restante é de cerca de 5,2 GB de memória usada "real". Mas a soma da coluna 6 em ps aux(RSS - tamanho do conjunto residente) totaliza 6,35 GB. Isso significaria que a memória relatada usada por todos os processos é 1,15 GB maior do que realmente é mostrada por free -m.

Gostaria de saber se existe uma maneira de calcular corretamente a memória usada por todos os processos, de modo que corresponda à memória usada (depois que o cache ZFS e os ramdisks compartilhados são subtraídos)?

process
  • 1 1 respostas
  • 85 Views

1 respostas

  • Voted
  1. Best Answer
    Artur Meinild
    2022-12-09T01:06:27+08:002022-12-09T01:06:27+08:00

    Portanto, como muitos provavelmente sabem, as estatísticas de memória relatadas por ps(e a própria métrica RSS) não são totalmente precisas por causa das páginas de memória compartilhada.

    Existe outra ferramenta chamada smem, que informa corretamente o tamanho do conjunto proporcional para cada processo - ou seja, o consumo de memória de cada processo, onde a memória compartilhada é dividida de maneira sã entre os processos.

    De man smem:

    smem relata o uso de memória física, levando em consideração as páginas de memória compartilhada.
    A memória não compartilhada é relatada como USS (Unique Set Size). A memória compartilhada é
    dividido igualmente entre os processos que compartilham essa memória. A memória não compartilhada
    (USS) mais a proporção de memória compartilhada de um processo é relatada como o PSS
    (tamanho do conjunto proporcional). O USS e o PSS incluem apenas o uso de memória física.
    Eles não incluem a memória que foi trocada para o disco.

    No entanto, existem alguns truques úteis para instalar e configurar smempara relatar facilmente a memória real usada por todos os processos.

    Instalando e configurandosmem

    Primeiro, se você deseja instalar o smem, precisa ter o repositório Universe ativado. Certifique-se de que esta linha não seja comentada /etc/apt/sources.list(para o Ubuntu 22.04):

    deb http://archive.ubuntu.com/ubuntu jammy universe
    

    Quando você está tentando instalar normalmente smem, ele quer instalar uma tonelada de dependências (pouco mais de 100 pacotes), porque tem uma dependência recomendada python3-matplotlibpara gerar gráficos gráficos.

    Como não preciso disso (e provavelmente qualquer pessoa com um servidor também não precisa), é possível instalar apenas o pacote básico com este comando:

    sudo apt install smem python3-matplotlib-
    

    Observe o traço depois python3-matplotlib- isso indica que esses pacotes não devem ser instalados. Outra opção é usar:

    sudo apt install --no-install-recommends smem
    

    Isso tem o mesmo resultado, que apenas instalará o smempacote.

    O truque final é corrigir as colunas, para que você possa usar corretamente awkou exportar as métricas de forma que você possa confiar nas colunas. Para fazer isso, precisamos mover a commandcoluna para o local mais à direita, pois o commandcampo pode incluir espaços adicionais que não podemos controlar.

    Para corrigir o layout e tamanho da coluna, smemdeve-se executar com estas opções:

    smem -ac "user pid swap maps vss uss pss rss command"
    

    Além disso, para incluir todos os processos, ele deve ser executado como sudo. Eu defini o seguinte alias para smem:

    alias smem='sudo smem -ac "user pid swap maps vss uss pss rss command"'
    

    Portanto, a seguir, quando digito o comando smem, ele de fato executa o comando com as opções acima.

    Comparação smeme psmétricas

    Agora podemos comparar corretamente as métricas de ps auxe smem. Eu esperava uma memória usada "real" de 5,2 GB, mas ps auxrelatei 6,35 GB usados. Abaixo estão os resultados de smem.

    Contagem de RSS de smem:

    $ smem | awk '{sum +=$8}END{print sum}'
    6464644
    

    Contagem de PSS de smem:

    $ smem | awk '{sum +=$7}END{print sum}'
    5281005
    

    Agora está claro que o RSS reportado é mais ou menos semelhante (um pouco acima de smem). Mas também está claro que o tamanho do conjunto proporcional (PSS) corresponde mais corretamente ao uso de memória esperado entre os processos - 5,2 GB.

    Portanto, para medir corretamente o uso total de memória do processo, a métrica PSS de smemparece fornecer o resultado mais significativo.

    • 2

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve