Top (pelo menos em algumas versões) calcula SWAP por processo como VIRT - RSS, em vez de relatar o uso de troca real. No Linux, o resultado é um número completamente sem sentido.
Eu tenho um problema estranho que quando eu executo top comando mostra que alguns processos estão usando cerca de 1,5 GB de espaço de swap, mas o uso geral da troca do sistema é muito menos para algo em torno 117MB, então porque é isso? Eu pensei que o uso geral do swap do sistema é o uso agregado de todos os processos, o que não parece ser verdade neste caso. Aqui está a saída:
Tasks: 392 total, 16 running, 373 sleeping, 0 stopped, 3 zombie
Cpu0 : 95.1%us, 4.9%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 98.0%us, 2.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 91.1%us, 6.9%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 2.0%si, 0.0%st
Cpu3 : 95.0%us, 3.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 2.0%si, 0.0%st
Mem: 4148160k total, 4007820k used, 140340k free, 15968k buffers
Swap: 4096552k total, 117584k used, 3978968k free, 2909396k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
5784 apache 18 0 1567m 5772 4568 S 0.0 0.1 0:00.03 1.5g C:\windows\system32\explorer.exe /desktop
5776 apache 25 0 1558m 2564 2124 S 0.0 0.1 0:00.00 1.5g C:\windows\system32\winedevice.exe MountMgr 5774 apache 25 0 1558m 2324 1928 S 0.0 0.1 0:00.00 1.5g C:\windows\system32\services.exe
9395 apache 15 0 90536 2988 1340 S 0.0 0.1 0:00.00 85m /usr/sbin/httpd
9419 apache 18 0 90536 2988 1340 S 0.0 0.1 0:00.00 85m /usr/sbin/httpd
27016 apache 18 0 91520 4000 2964 S 0.0 0.1 0:00.04 85m /usr/sbin/httpd
7773 apache 16 0 91012 3592 1464 S 0.0 0.1 0:07.04 85m /usr/sbin/httpd
Top (pelo menos em algumas versões) calcula SWAP por processo como VIRT - RSS, em vez de relatar o uso de troca real. No Linux, o resultado é um número completamente sem sentido.
A coluna SWAP em top
é o cálculo (aproximadamente) do uso do processo de troca e de qualquer arquivo mapeado e / ou objetos compartilhados usados por este processo . Os arquivos mapeados não fazem parte do swap , são arquivos lidos pelo processo de uma certa maneira e os objetos compartilhados são bibliotecas dinâmicas (.so) ou blocos de memória compartilhados entre processos.
Portanto, se dois processos compartilharem um grande espaço de memória juntos, ele será contado duas vezes em top
uma vez para cada processo. Esse pedaço de memória (se houver memória livre suficiente e se estiver ativa) pode não estar na troca. Esse pedaço de memória é "reservado" para o processo, não significa que seja usado inteiramente, por isso não está necessariamente ocupando muita RAM física.
A página man afirma: "O SWAP é calculado subtraindo a memória física da memória virtual ". O valor computado não deve depender, a menos que você seja um desenvolvedor (e saiba o que está fazendo), para os usuários casuais isso não tem um significado real, veja abaixo o motivo.
Nota: VIRT significa memória virtual.
Cada processo no Linux (e isso como similaridades em muitos sistemas Unix também) é alocado em um espaço de endereço virtual. Em um sistema de 32 bits, esse espaço de endereço virtual é de até 4GiB (2 ^ 32). Em um sistema de 64 bits. esse espaço de endereço virtual é de até 256TiB (2 ^ 48 sim, um sistema de bases de 64 bits usando a extensão atual de 64 bits da AMD64 ou Intel pode somente endereçar 48 bits de memória).
Cada memória virtual do processo contém o espaço do kernel e a área do espaço do usuário. Em um sistema de 32 bits, os splits dependem se o PAE está ativado ou não, então pode ser 3GiB / 1GiB ou 2GiB / 2GiB. Em 64 bits, é sempre (AFAIK) metade / metade, portanto, os primeiros 47 bits (128 TBB) são para o espaço do usuário e, no final da área de 64 bits, há 128 TBb reservados para o kernel.
A memória virtual compreende o código, dados e BSS do processo em execução, inclui ainda a pilha e o heap, e a área de mapeamento de memória. Esta área contém qualquer memória compartilhada (IPC, objetos compartilhados) e também pode conter o arquivo (AFAIK) mapeado na memória. Veja este gráfico que fiz para o sistema de 64 bits .
É possível mapear arquivos maiores que a memória disponível, para que o tamanho da VIRT possa ser maior que a memória. O kernel é inteligente o suficiente para carregar / descarregar os dados do armazenamento para a memória para acelerar a E / S tanto quanto a RAM física livre disponível permitir.
Você não deve se importar como usuário sobre o tamanho da VIRT. Isto é principalmente destinado a desenvolvedores (hard core).
Em conclusão , a coluna SWAP calcula a memória virtual menos a memória física (mais do que provavelmente RSS), isso provavelmente inclui a parte de troca usada e qualquer arquivo mapeado que também esteja no disco.
Tags swap top linux centos5 linux-kernel