Como a memória RES reportada para um processo Java pode ser maior que a memória VIRT?

2

Estou monitorando um processo Java (Oracle Weblogic) usando o TOP e observei que às vezes o seguinte acontece:

  • O RES aumentará de seu nível estável normal de 2.097.152 KB para quase 10 GB ao longo de uma hora ou mais, depois cairá para zero e, em seguida, será revertido para 2.097.152 KB
  • Durante todo esse tempo, a memória VIRT permanece constante em 6.904.832 KB
  • % MEM aumenta enquanto o RES está aumentando e continua aumentando quando o RES cai (o sistema tem 32 GB de RAM)

Eu li uma série de explicações sobre o que RES, VIRT e% MEM são, incluindo man top , e isso realmente não se encaixa em nenhum deles. Especificamente, achei que RES e% MEM deviam estar completamente correlacionados, e que o RES nunca pode ser maior que o VIRT.

Alguém pode explicar o que está acontecendo?

Eu incluí uma imagem abaixo mostrando o comportamento ao longo do tempo.

Pode ser relevante que este seja um nó do sistema com balanceamento de carga, e o outro nó continue como se nada tivesse acontecido. Eu já vi isso meia dúzia de vezes em qualquer nó em diferentes dias. Isso causa um pequeno pico nos tempos de resposta do usuário final, no ponto em que o RES cai. Ambos os nós são muito parecidos. O administrador definiu vários sinalizadores de memória que foram definidos no processo Java. O GC detalhado está ativado e não houve GC completo durante o período abaixo.

    
por Anon Gordon 29.01.2015 / 04:47

0 respostas