Pergunta

Linux Noob pergunta:

Se eu tiver 500 MB de RAM e 500 MB de espaço de troca, pode o sistema operacional e processos, em seguida, usar 1GB de memória?

Em outras palavras, é a quantidade total de memória disponível para programas eo sistema operacional do total do tamanho da memória e swap tamanho físico?

Eu estou tentando descobrir quais contadores SNMP para consulta, mas necessidade de compreender como Linux utiliza a memória virtual um pouco melhor primeiro.

Graças

Foi útil?

Solução

Sim, esta é essencialmente correta. Os números reais podem ser (muito) ligeiramente inferior, mas para todos os efeitos, se você tem x memória física e memória virtual y (swap em linux), então você tem memória x + y disponível para o sistema operacional e todos os programas em execução sob o OS.

Outras dicas

Na verdade, é essencialmente correta, mas a sua memória "virtual" não reside ao lado a sua "memória física" (como Matthew Scharley indicado).

A sua "memória virtual" é uma camada de abstração que abranja tanto "física" (como na RAM) e "troca" (como no disco rígido, que é, naturalmente, tanto física como memória RAM é) de memória.

A memória virtual está em essention uma camada de abstração. Seu programa sempre aborda um endereço "virtual", que o seu sistema operacional se traduz em um endereço na RAM ou no disco (que precisa ser carregado para a RAM primeiro) dependendo de onde reside a dados. Portanto, o seu programa nunca tem que se preocupar com falta de memória.

Nada é tão simples mais ...

páginas de memória são preguiçosamente alocado. Um processo pode malloc () uma grande quantidade de memória e nunca usá-lo. Então, em seu sistema 500MB_RAM + 500MB_SWAP, eu poderia - pelo menos em teoria - alocar 2 giga de memória fora do heap e as coisas vão correr alegremente ao longo até que eu tente usar muito do que a memória. (Em que ponto qualquer processo que não poderia adquirir mais páginas de memória fica nuked. Esperemos que ele é o meu processo. Mas nem sempre.)

processos individuais podem ser limitado a 4 actuação como uma limitação endereço de disco em sistemas de 32-bit. Mesmo quando você tem mais de 4 giga de RAM na máquina e você estiver usando aquela atrocidade de 36 bits segmentada bizarra do inferno esquema de endereçamento, os processos individuais ainda estão limitados a apenas 4 shows. Alguns dos que 4 GB tem que ir para as bibliotecas compartilhadas e código do programa. Então yer até 2-3 GB de pilha + pilha como uma limitação de endereçamento.

Você pode mmap arquivos, efetivamente dando-lhe mais memória. Que basicamente funciona como swap extra. Ou seja, Em vez de carregar dados de código binário de um programa na memória e, em seguida, trocando-lo para o arquivo de swap, o arquivo é apenas mmapped. Conforme necessário, as páginas são trocadas na RAM diretamente do arquivo.

Você pode entrar em algumas coisas interessantes com dados esparsos e arquivos esparsos mmapped. Eu vi X-windows reivindicam o uso de memória enorme, quando na verdade ele só estava usando-se um pouquinho.

BTW: " livre " pode ajudá-lo. Como era de " cat / proc / meminfo " ou os Vm linhas em / proc / $ PID / status . (Especialmente VmData e VmStk .) Ou talvez " ps para cima $ PID "

Embora na maior parte é verdade, não é inteiramente correta. Para um processo particular, o ambiente que você executá-lo no pode limitar a memória disponível para o seu processo. Verifique a saída de ulimit -v também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top