free / top difference. O livre mostra a memória virtual?

1

free -m mostra o seguinte no meu sistema:

             total       used       free     shared    buffers     cached
Mem:          3954       3842        111          0        248       2585
-/+ buffers/cache:       1008       2945
Swap:         3811          4       3807

Portanto, a memória parece bem usada, mas top ordenada pela memória mostra os seguintes processos principais:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                              
 8891 minecraf  20   0 2374m 277m 9.9m S    1  7.0   0:12.21 java                                                                                                                                                                  
 8704 root      39  19 2802m 272m  11m S    0  6.9   0:28.73 java      

A memória virtual usada pelo java parece ser enorme, mas eu aprendi na internet que isso não é um problema. Então, eu acho que minha pergunta é: Por que o free mostra a memória virtual, se não é tão significativo?

    
por Fabian Zeindl 24.05.2012 / 23:44

2 respostas

1

A linha "Mem" de free não mostra o uso da memória virtual, ela mostra o uso da memória física.

As colunas "RES" (para residentes) e "% MEM" de top mostram o mesmo: a memória física sendo usada por cada processo.

free faz mostrar o espaço de troca disponível e usado, e top tem sua coluna "VIRT", sendo que ambos podem ser importantes. Grosso modo, o espaço de troca e a memória física fornecem o espaço total de memória virtual possível. Alcance esse limite e você começará a ter processos mortos ou incapazes de alocar memória e as coisas ficarão ruins.

    
por 24.05.2012 / 23:56
0

A contagem de VIRTs pode ser enorme, já que você pode mapear a memória virtual para arquivos ou bibliotecas. Eu tenho um pequeno aplicativo Java em execução que usa ~ 6g de memória VIRT, mas 59m de RESIDÊNCIA.

The virtual memory used by java seems to be huge, but i learned on the internet that that's not a problem

A razão pela qual a memória virtual não é tão importante é que ela é paginada para trocar espaço (armazenamento em hdd) quando não é usada ou a memória residente livre é necessária. As coisas nos espaços de troca vão lá por um motivo; porque é usado raramente (ou não em todos, mas apenas referenciado em algum lugar). Se você estiver em um sistema operacional de 64 bits, poderá endereçar muito mais do que você usa e deixar o gerenciador de memória virtual se preocupar.

Esta postagem de blog tem alguns comentários sobre a memória virtual na programação: link

Você não deveria estar trocando dados freqüentemente usados de RAM para HDD em primeiro lugar, e é por isso que você está dizendo que não é um problema que Java aloca muita memória.

    
por 26.05.2012 / 03:06

Tags