Por que o “apt-get .update” aumenta significativamente o uso da memória? [fechadas]

0

Meu entendimento é que o apt-get update apenas atualiza a lista de pacotes e não instala novas versões de software.

Mas se eu executar o apt-get update, ele consome quase 200MB de memória a mais que antes. A memória disponível caiu de 1.1G para 930M.

A saída do terminal

rodando "apt-get update" está abaixo

Get:1 http://security.debian.org jessie/updates InRelease [63.1 kB]Ign http://httpredir.debian.org jessie InRelease                                      
Get:2 http://httpredir.debian.org jessie-updates InRelease [145 kB]
Get:3 http://security.debian.org jessie/updates/main Sources [207 kB]         

Get:4 http://httpredir.debian.org jessie Release.gpg [2373 B]                          

Get:5 http://httpredir.debian.org jessie Release [148 kB]                                   

Get:6 http://security.debian.org jessie/updates/main armhf Packages [424 kB]                       
Get:7 http://httpredir.debian.org jessie-updates/main Sources [17.2 kB]                                     
Get:8 http://security.debian.org jessie/updates/main Translation-en [232 kB]                                                 
Get:9 http://httpredir.debian.org jessie-updates/main Translation-en [14.9 kB]           
Get:10 http://httpredir.debian.org jessie/main Sources [7054 kB]                                                            

Get:11 http://httpredir.debian.org jessie/main armhf Packages [6645 kB]         
Get:12 http://httpredir.debian.org jessie/main Translation-en [4582 kB]                                                      
Get:13 http://httpredir.debian.org jessie-updates/main armhf Packages [20.1 kB]                                              
Fetched 19.6 MB in 48s (403 kB/s)                                                                                            

Reading package lists... Done
    
por sh0731 25.10.2017 / 19:02

1 resposta

1

O uso de memória pelo apt é uma combinação de o que está fazendo, e como está fazendo esse trabalho.

O apt update (ou apt-get update em sistemas mais antigos) faz o download não apenas de uma lista dos pacotes disponíveis, mas de um banco de dados completo de pacotes, versões, descrições e informações variadas. Ele faz o download desse banco de dados de cada repositório.

Você pode ver o tamanho de cada arquivo usando o comando ls -lh /var/lib/apt/lists

Aqui está um exemplo de 17.04. Os arquivos carregados baixados em uma atualização e recarregados toda vez que você executa o apt estão perto de 10 MB:

-rw-r--r-- 1 root root  88K Oct 24 06:41 security.ubuntu.com_ubuntu_dists_zesty-security_InRelease
-rw-r--r-- 1 root root  15K Oct 24 04:56 security.ubuntu.com_ubuntu_dists_zesty-security_main_dep11_Components-amd64.yml.gz
-rw-r--r-- 1 root root  18K Oct 24 04:56 security.ubuntu.com_ubuntu_dists_zesty-security_main_dep11_icons-64x64.tar.gz
-rw-r--r-- 1 root root  156 Oct 24 05:02 security.ubuntu.com_ubuntu_dists_zesty-security_multiverse_dep11_Components-amd64.yml.gz
-rw-r--r-- 1 root root  27K Oct 24 04:59 security.ubuntu.com_ubuntu_dists_zesty-security_universe_dep11_Components-amd64.yml.gz
-rw-r--r-- 1 root root  41K Oct 24 04:59 security.ubuntu.com_ubuntu_dists_zesty-security_universe_dep11_icons-64x64.tar.gz
-rw-r--r-- 1 root root  88K Oct 24 06:37 us.archive.ubuntu.com_ubuntu_dists_zesty-backports_InRelease
-rw-r--r-- 1 root root 4.8K Oct 24 04:42 us.archive.ubuntu.com_ubuntu_dists_zesty-backports_universe_dep11_Components-amd64.yml.gz
-rw-r--r-- 1 root root  88K Oct 24 06:37 us.archive.ubuntu.com_ubuntu_dists_zesty-updates_InRelease
-rw-r--r-- 1 root root 1.4M Oct 24 01:55 us.archive.ubuntu.com_ubuntu_dists_zesty-updates_main_binary-amd64_Packages
-rw-r--r-- 1 root root 1.3M Oct 24 01:55 us.archive.ubuntu.com_ubuntu_dists_zesty-updates_main_binary-i386_Packages
-rw-r--r-- 1 root root  63K Oct 24 05:06 us.archive.ubuntu.com_ubuntu_dists_zesty-updates_main_dep11_Components-amd64.yml.gz
-rw-r--r-- 1 root root  32K Oct 24 05:06 us.archive.ubuntu.com_ubuntu_dists_zesty-updates_main_dep11_icons-64x64.tar.gz
-rw-r--r-- 1 root root 6.2K Oct 24 05:12 us.archive.ubuntu.com_ubuntu_dists_zesty-updates_multiverse_dep11_Components-amd64.yml.gz
-rw-r--r-- 1 root root 879K Oct 24 01:55 us.archive.ubuntu.com_ubuntu_dists_zesty-updates_universe_binary-amd64_Packages
-rw-r--r-- 1 root root 877K Oct 24 01:55 us.archive.ubuntu.com_ubuntu_dists_zesty-updates_universe_binary-i386_Packages
-rw-r--r-- 1 root root 221K Oct 24 05:09 us.archive.ubuntu.com_ubuntu_dists_zesty-updates_universe_dep11_Components-amd64.yml.gz
-rw-r--r-- 1 root root 242K Oct 24 05:09 us.archive.ubuntu.com_ubuntu_dists_zesty-updates_universe_dep11_icons-64x64.tar.gz

O motivo pelo qual o apt leva 200 MB em vez de 10 MB é que o apt deve então mesclar todos esses bancos de dados em um, e então classificar e filtrar esse enorme banco de dados para realmente calcular uma ação do pacote. Cada ação leva mais e mais memória.

A maioria das funções do apt são escritas em Python3, o que as torna fáceis de manter, mas dependem da coleta de lixo e do gerenciamento de memória do Python3. O Python não é um sujeira por qualquer meio, mas também é eficiente em termos de memória quando, digamos, mescla bancos de dados. Experimente: escreva um conjunto de bancos de dados e veja a quantidade de memória necessária para que o Python3 os mescle. Se isso incomoda você, então fique à vontade para contribuir com um algoritmo melhor para o Python3.

Finalmente, o apt (e o Python3) liberam sua memória usada após a conclusão. Se você descobrir um vazamento de memória no apt, por favor, envie um relatório de bug!

    
por user535733 25.10.2017 / 19:40