Seu computador Linux ou macOS está usando memória virtual. Descubra como isso está afetando o uso de memória física, CPU e recursos do disco rígido pelo sistema.
Índice
O que é memória virtual?
Seu computador está equipado com uma quantidade finita de memória física chamada memória de acesso aleatório (RAM). Essa RAM precisa ser gerenciada pelo kernel e compartilhada entre o sistema operacional e quaisquer aplicativos que estejam em execução. Se essas demandas combinadas estão exigindo mais memória do que a fisicamente instalada em seu computador, o que o kernel pode fazer?
Linux e sistemas operacionais semelhantes ao Unix, como o macOS, podem usar espaço no disco rígido para ajudá-los a gerenciar as demandas de memória. Uma área reservada de espaço no disco rígido chamada “espaço de troca” pode ser usada como se fosse uma extensão da RAM. Esta é a memória virtual.
O kernel do Linux pode gravar o conteúdo de um bloco de memória no espaço de troca e liberar essa região de RAM para uso por outro processo. A memória trocada – também chamada de “paginada” – pode ser recuperada do espaço de troca e restaurada na RAM quando necessário.
Obviamente, a velocidade de acesso à memória paginada é mais lenta do que a da memória retida na RAM. E essa não é a única compensação. Embora a memória virtual forneça uma maneira para o Linux gerenciar suas demandas de memória, o uso da memória virtual aumenta a carga de trabalho em outras partes do computador.
Seu disco rígido deve realizar mais leituras e gravações. O kernel – e, portanto, a CPU – deve trabalhar mais à medida que troca a memória, troca a memória e mantém todas as placas girando para satisfazer as necessidades de memória dos diferentes processos.
O Linux fornece uma maneira de monitorar toda essa atividade na forma do vmstat
comando, que relata as estatísticas da memória virtual .
O comando vmstat
Se você digitar vmstat
como um comando sem parâmetros, ele mostrará um conjunto de valores. Esses valores são as médias de cada uma das estatísticas desde a última reinicialização do computador. Esses números não são um instantâneo dos valores “agora”.
vmstat
Uma pequena tabela de valores é exibida.
Existem colunas intituladas Procs, Memory, Swap, IO, System e CPU. A coluna final (coluna mais à direita) contém os dados relativos à CPU.
Aqui está uma lista dos itens de dados em cada coluna.
Proc
- r : O número de processos executáveis. Esses são processos que foram iniciados e estão em execução ou aguardando seu próximo burst de ciclos de CPU dividido em fatias de tempo.
- b : O número de processos em hibernação ininterrupta. O processo não está hibernando, está executando uma chamada de sistema de bloqueio e não pode ser interrompido até que tenha concluído sua ação atual. Normalmente, o processo é um driver de dispositivo aguardando a liberação de algum recurso. Quaisquer interrupções enfileiradas para esse processo são tratadas quando o processo retoma sua atividade normal.
Memória
- swpd : a quantidade de memória virtual usada. Em outras palavras, quanta memória foi trocada.,
- livre : a quantidade de memória ociosa (atualmente não usada).
- buff : a quantidade de memória usada como buffers.
- cache : a quantidade de memória usada como cache.
Troca
- si : quantidade de memória virtual trocado na partir do espaço swap.
- assim : quantidade de memória virtual trocado para fora para o espaço de troca.
IO
- bi : Blocos recebidos de um dispositivo de bloco. O número de blocos de dados usados para trocar a memória virtual de volta para RAM.
- bo : Blocos enviados para um dispositivo de bloco. O número de blocos de dados usados para trocar a memória virtual da RAM para o espaço de troca.
Sistema
- in : O número de interrupções por segundo, incluindo o relógio.
- cs : o número de mudanças de contexto por segundo. Uma mudança de contexto ocorre quando o kernel muda do processamento do modo de sistema para o processamento do modo de usuário.
CPU
Todos esses valores são porcentagens do tempo total da CPU.
- us : Tempo gasto na execução de código não kernel. Ou seja, quanto tempo é gasto no processamento do tempo do usuário e no processamento do tempo agradável.
- sy : Tempo gasto executando o código do kernel.
- id : Tempo gasto inativo.
- wa : Tempo gasto esperando por entrada ou saída.
- st : Tempo roubado de uma máquina virtual. Este é o tempo que uma máquina virtual tem que esperar até que o hipervisor termine de atender outras máquinas virtuais antes de poder voltar e atender a essa máquina virtual.
Usando um intervalo de tempo
Podemos vmstat
fornecer atualizações regulares para esses números usando um delay
valor. O delay
valor é fornecido em segundos. Para que as estatísticas sejam atualizadas a cada cinco segundos, usaríamos o seguinte comando:
vmstat 5
A cada cinco segundos vmstat
adicionará outra linha de dados à tabela. Você precisará pressionar Ctrl + C para parar isso.
Usando um valor de contagem
Usar um delay
valor muito baixo colocará pressão adicional em seu sistema. Se você precisar de atualizações rápidas para tentar diagnosticar um problema, é recomendável usar um count
valor, bem como um delay
valor.
O count
valor informa vmstat
quantas atualizações devem ser executadas antes de sair e retorna ao prompt de comando. Se você não fornecer um count
valor, o vmstat
será executado até ser interrompido por Ctrl + C.
Para vmstat
fornecer uma atualização a cada cinco segundos, mas apenas para quatro atualizações, use o seguinte comando:
vmstat 5 4
Depois de quatro atualizações vmstat
para por conta própria.
Mudando as unidades
Você pode optar por ter a memória e as estatísticas de troca exibidas em kilobytes ou megabytes usando a opção -S
(caractere de unidade). Isto deve ser seguido por um de k
, K
, m
, ou M
. Estes representam:
- k : 1000 bytes
- K : 1024 bytes
- m : 1000000 bytes
- M : 1048576 bytes
Para que as estatísticas sejam atualizadas a cada 10 segundos com as estatísticas de memória e troca exibidas em megabytes, use o seguinte comando:
vmstat 10 -SM
As estatísticas de memória e troca agora são mostradas em megabytes. Observe que a -S
opção não afeta as estatísticas do bloco IO. Eles são sempre exibidos em blocos.
Memória ativa e inativa
Se você usar a -a
opção (ativo), as colunas de memória buff e cache são substituídas pelas colunas “inativo” e “ativo”. Como eles sugeriam, eles mostram a quantidade de memória ativa e inativa.
Para ver essas duas colunas em vez das colunas de buff e cache, inclua a -a
opção, conforme mostrado:
vmstat 5 -a -SM
As colunas inativas e ativas são afetadas pela opção -S (caractere de unidade).
Forks
A -f
opção exibe o número de bifurcações ocorridas desde que o computador foi inicializado.
Em outras palavras, isso mostra o número de tarefas que foram iniciadas (e, na maioria delas, fechadas novamente) desde que o sistema foi inicializado. Cada processo iniciado na linha de comando aumentaria esse número. Cada vez que uma tarefa ou processo gera ou clona uma nova tarefa, esse número aumentará.
vmstat -f
O visor dos garfos não é atualizado.
Exibindo Slabinfo
O kernel tem seu próprio gerenciamento de memória para se preocupar, bem como o gerenciamento de memória para o sistema operacional e todos os aplicativos.
Como você pode imaginar, o kernel está alocando e desalocando memória continuamente para os muitos tipos diferentes de objetos de dados que ele deve manipular. Para tornar isso o mais eficiente possível, ele usa um sistema chamado lajes. Esta é uma forma de armazenamento em cache.
A memória alocada, usada e não mais necessária para um tipo específico de objeto de dados do kernel pode ser reutilizada para outro objeto de dados do mesmo tipo sem que a memória seja desalocada e realocada. Pense nas placas como segmentos de RAM pré-alocados e feitos sob medida para as necessidades do próprio kernel.
Para ver as estatísticas das lajes, use a -m
opção (lajes). Você precisará usar sudo
e será solicitada sua senha. Como a saída pode ser bastante longa, estamos canalizando-a less
.
sudo vmstat -m | Menos
A saída possui cinco colunas. Esses são:
- Cache : nome do cache.
- num : O número de objetos atualmente ativos neste cache.
- total : o número total de objetos disponíveis neste cache.
- size : o tamanho de cada objeto no cache.
- páginas : O número total de páginas de memória que têm (pelo menos) um objeto atualmente associado a este cache.
Pressione q
para sair less
.
Exibindo contadores de eventos e estatísticas de memória
Para exibir uma página de contadores de eventos e estatísticas de memória, use a -s
opção (estatísticas). Observe que é um “s” minúsculo.
vmstat -s
Embora as estatísticas relatadas sejam basicamente as mesmas que as informações que constituem a vmstat
saída padrão , algumas delas são divididas em mais detalhes.
Por exemplo, a saída padrão combina o tempo de CPU do usuário agradável e não agradável na coluna “us”. A exibição -s (estatísticas) lista essas estatísticas separadamente.
Exibindo estatísticas de disco
Você pode obter uma lista semelhante de estatísticas de disco usando a -d
opção (disco).
vmstat -d | Menos
Para cada disco, três colunas são exibidas: Leituras, Gravações e E / S.
IO é a coluna mais à direita. Observe que a coluna sec em IO é medida em segundos, mas as estatísticas baseadas em tempo nas colunas de leitura e gravação são medidas em milissegundos.
Isso é o que as colunas significam:
Lê
- total : a contagem total de leituras do disco.
- mesclado : a contagem total de leituras agrupadas.
- setores : a contagem total de setores lidos.
- ms : Contagem total de tempo em milissegundos que foi usado para ler dados do disco.
escreve
- total : a contagem total de gravações em disco.
- mesclado : a contagem total de gravações agrupadas.
- setores : a contagem total de setores gravados.
- ms = Contagem total de tempo em milissegundos que foi usado para gravar dados no disco.
IO
- cur: Número de leituras ou gravações de disco atuais.
- sec: Tempo gasto em segundos para qualquer leitura ou gravação em andamento.
Exibindo Estatísticas Resumidas de Disco
Para ver uma exibição rápida das estatísticas resumidas da atividade do disco, use a opção -D
(soma do disco). Observe o “D” maiúsculo.
vmstat -D
O número de discos pode parecer anormalmente alto. O computador usado para pesquisar este artigo está executando o Ubuntu. Com o Ubuntu, cada vez que você instala um aplicativo de um Snap, um squashfs
pseudo-sistema de arquivos é criado e anexado a um dispositivo / dev / loop.
Infelizmente, essas entradas de dispositivo são contadas como dispositivos de disco rígido por muitos dos comandos e utilitários do Linux.
Exibindo estatísticas de partição
Para ver as estatísticas relacionadas a uma partição específica, use a -p
opção (partição) e forneça o identificador da partição como um parâmetro de linha de comando.
Aqui, veremos a partição sda1
. O dígito um indica que esta é a primeira partição no dispositivo sda
, que é o disco rígido principal deste computador.
vmstat -p sda1
As informações retornadas mostram a contagem total de leituras e gravações de disco de e para essa partição, e o número de setores incluídos nas ações de leitura e gravação de disco.
Uma espiada nos bastidores
É sempre bom saber como levantar o capô e ver o que está acontecendo por baixo. Às vezes, você tentará resolver um problema, às vezes não será do seu interesse porque deseja saber como o seu computador funciona.
vmstat
pode fornecer uma tonelada de informações úteis. Agora você sabe como acessá-lo e o que significa. E avisado vale por dois – quando você precisar arregaçar as mangas e fazer alguns diagnósticos, saberá que está vmstat
do seu lado.