Desvantagens de processos com tamanho virtual alto, mas baixo uso de memória RAM e GPU

1

Eu notei que alguns dos meus processos tomam muito tamanho virtual no meu computador. Eu entendo que o tamanho virtual de um processo é a soma da memória que ele está realmente usando, a memória que ele mapeou para si mesmo ( por exemplo, a RAM da placa de vídeo para o servidor X), arquivos em disco que foram mapeados para ele (principalmente bibliotecas compartilhadas) e memória compartilhada com outros processos. Em outras palavras, o tamanho virtual representa a quantidade de memória que o programa pode acessar no momento presente.

Os processos que estou executando ocupam muito tamanho virtual (~ 117 GB), mas pouca RAM:

epoucamemóriaGPU:

ebaixaE/Sdedisco:

Existe algum efeito potencialmente ruim que tais processos com alto tamanho virtual (mas pouca RAM, pouca memória de GPU e baixa E / S de disco) possam ter? Eles podem de alguma forma retardar outros processos? O computador tem 32 GB de RAM.

    
por Franck Dernoncourt 27.01.2016 / 19:38

1 resposta

3

Em geral, provavelmente não terá um efeito ruim. No entanto, o Linux por padrão permite supercomprometir a memória . Isso significa que, se um processo pedir memória, o Linux dirá "seguro". Então, se ele realmente ficar sem memória (incluindo espaço de troca), o Linux iniciará a eliminação de processos para liberar memória.

Portanto, se o seu processo alocar 117 GB, mas não usar a maior parte dele, ele mostrará 117 GB de memória virtual. No entanto, se o seu processo, de repente, decidir que vai encher 117 GB, o Linux ficará sem memória e o matará, e talvez outros processos também (é aí que o efeito ruim entra).

O kernel do Linux pode ser configurado quanto ao comprometimento excessivo que ele permitirá. O processo de como fazer isso é descrito nesse link, mas vou descrevê-lo aqui também para manter tudo em um só lugar.

Nos kernels Linux ≥ 2.5.30, existem dois arquivos proc que regulam isso. Primeiro, há /proc/sys/vm/overcommit_memory . Isso pode ter três valores:

  • 0 : deixa o kernel decidir por si mesmo quanto de excesso de permissão ele permite
  • 1 : permite supercomprometimento ilimitado
  • 2 : permitir supercomprometimento de acordo com /proc/sys/vm/overcommitment_ratio .

O outro arquivo proc, /proc/sys/overcommitment_ratio , denota a porcentagem de supercomprometimento de memória que será permitida se o outro estiver definido como 2 . Se overcommit_memory estiver definido como 2 , o Linux permitirá que todo o espaço de troca seja confirmado, além de overcommitment_ratio % de RAM.

    
por 28.01.2016 / 00:20