Por que baixar um arquivo grande com wget parece consumir quase toda a RAM disponível? [fechadas]

1

Estou tentando baixar um arquivo de 580 MB com o seguinte comando simples wget :

wget http://example.com/file.ext

O servidor tem 16 GB de RAM instalada e, durante todo o download, o uso de memória aumenta de 10% para até 99%.

Como é possível que o download de um arquivo de 580MB requeira mais de 14GB de RAM?

    
por markjfekjfe 19.10.2014 / 04:57

2 respostas

2

A menos que você esteja baixando o arquivo para /dev/shm ou um tmpfs file system wget, por si só, não deve estar usando gigabytes de memória. Heck, nem deveria estar usando megabytes.

É altamente improvável que wget esteja consumindo muita memória. Como você está verificando seu uso?

Se você executar top -o RES , ele classificará por utilização de memória (não compartilhada). Ignore a coluna VIRT , observe a coluna RES do tamanho. Se uma unidade (KB, MB, GB) não for exibida, é mais provável que seja relatada em KB.

Você pode usar ps aux (ou uma infinidade de outras configurações de sinalizador) para obter a utilização de memória para cada processo. Observe a coluna RSS do tamanho da memória não compartilhada do processo. Isso informará o tamanho em KB.

Se isso ajudar, aqui está uma maneira fácil de mostrar o quanto está sendo usado. Abra duas sessões de shell no seu servidor. Na primeira execução deste loop while:

while true
do
  ps -eo size,command | awk '/wget/&&!/ps.*awk/{print $1, "KB", $2}'
  sleep 5
done

Na segunda sessão, execute seu wget command . Na primeira sessão de terminal, você deverá ver uma saída semelhante a esta:

$ bash loop.sh
516 KB wget
516 KB wget
516 KB wget
516 KB wget
... (so on and so forth until you CTRL-C out of the while loop)

Ele executará ps a cada cinco segundos e informará exatamente quanto de memória está sendo usada por esse processo.

Se estiver usando gigabytes de memória ... bem, há algo realmente errado com wget ou as bibliotecas compartilhadas que ele usa. Nesse ponto, você precisará usar lsof ou strace ou outros utilitários semelhantes para descobrir o que está errado.

    
por 19.10.2014 / 10:52
1

Eu suspeito que o problema esteja relacionado ao modo como a memória está sendo analisada.

Supondo que um sistema Linux ou similar esteja sendo usado, existem 2 partes na memória - a memória real usada pelos aplicativos e pelo buffer / cache. Eu suspeito que o que você está vendo é o buffer / memória cache preenchendo, e mostrando pouca memória livre - claro que isso é um pouco enganador, porque assim que for necessário, a memória pode ser realocada para outros programas que precisarem dela. p>

IE Isso não tem nada a ver com o WGET e tudo a ver com a maneira como o Linux gerencia a memória - é "praticamente inofensivo", já que a memória usada pelo cache / buffers pode ser recuperada sob demanda.

    
por 19.10.2014 / 08:19