Entendendo o uso de RAM no Linux

1

Sou completamente novo no Linux e estou apenas tentando entender para onde toda a minha RAM está indo. Eu tenho uma instalação bem nova do Xubuntu rodando como convidado VMWare, e eu dei 1.5GB de RAM para jogar.

Depois de executar apenas dois aplicativos inicializando os servidores Tomcat e também executando o Firefox, quase não tenho mais nada. 160MB de acordo com o free -m.

Olhando para a saída de Top, vejo Java aparecendo duas vezes, cada um roubando cerca de meia memória residente. Ambas as instâncias do Tomcat usam o mesmo jdk, eu teria pensado que só veria o Java lá uma vez.

Qual é a história?

Atualizar

A saída gratuita -m solicitada:

             total     used     free    shared    buffers    cached
Mem:          1419     1380       39         0          8       111
-/+ buffers/cache:     1259      160       
Swap:          509       68      441

Parte superior:

    VIRT   RES   SHR   %MEM   COMMAND
   74764   36m  6032    2.6   Xorg
    750m  500m  3436   35.5   java
    881m  408m   10m   28.8   java
    6128  1876  1588    0.1   vmtoolsd
   26156  3408  2672    0.2   vmware-user-load
    409m  104m   15m    7.4   firefox-bin
    2632  1060   776    0.1   top
    3032  1264   812    0.1   init
    All zeroes after here.
    
por jontyc 24.06.2011 / 10:12

1 resposta

4

Este não é um problema do Linux, é um problema de Java (e comportamento completamente normal). O mesmo acontecerá no Windows, embora eu possa estar mais ansioso em trocar parte desses processos do Tomcat.

Primeiro, duas instâncias do Tomcat vão iniciar duas instâncias da JVM em dois processos separados. A questão é se você realmente precisa de duas instâncias do Tomcat. Você pode facilmente executar dois webapps diferentes na mesma instância.

Em segundo lugar, Java como uma linguagem baseada na coleção garbace gosta de ter muita memória para jogar e tende a usar uma grande porcentagem do heap máximo que é permitido usar, porque dessa forma faz menos trabalho geral na coleta de lixo . Também não costuma devolver a memória não utilizada ao SO, porque pode ser necessário em breve.

Se tiver certeza de que seus aplicativos da Web precisam de menos de metade de uma memória de gigabyte, você poderá iniciar o Tomcat com um heap máximo menor definindo a variável de ambiente CATALINA_OPTS como "-Xmx256m" em catalina.sh para obter um máximo de heap 256MB. Se, às vezes, seu aplicativo precisar de mais memória, mas você quiser que ele diminua mais rapidamente, configure-o para "-XX: MaxHeapFreeRatio = 20 -XX: MinHeapFreeRatio = 10" - isso devolverá memória ao SO se mais de 20% do heap é livre após a coleta de lixo e expanda o heap se menos de 10% estiver livre. Mas isso pode reduzir o desempenho fazendo com que o Java gaste muito tempo alocando memória do sistema operacional e liberando-o novamente logo após.

    
por 24.06.2011 / 10:26