Ler a lista de pacotes leva uma eternidade

25

Estou tentando atualizar minhas coisas na minha máquina e parece que não consigo ler minha lista de pacotes. Parece que toda vez que eu faço sudo apt-get install *something* && sudo apt-get updateisso fica preso na leitura da lista de pacotes, isso não foi um problema antes. Aqui estão as minhas especificações e outros enfeites:

  • Memória: 15,8 gb
  • Processador: AMD Phenom (tm) II x4 965 Processador x 4
  • Placa gráfica: Gallium 0.4 on AMD BARTS
  • Tipo de SO: 32 bits
  • Velocidade de internet : insira a descrição da imagem aqui
Dre
fonte
2
Apenas esclarecendo ... você está falando sobre execução sudo apt-get update, correto?
Jack
2
Em Software Sources, veja se a seleção de outro servidor, em vez do atual, ajuda.
Desculpe por não escrever mais sobre esse problema. Mas aqui está o negócio! toda vez que eu executo uma atualização do sudo apt-get, a atualização do sudo apt-get ou 'sodu apt-get install algo ', ele chegará a ele eventualmente, mas leva 30 minutos para ler a lista. Eu tentei mudar de servidor, e isso não ajudou.
Dre
Quais são as especificações do seu computador e sua conexão com a Internet? Edite sua pergunta com novas informações, não as adicione nos comentários ...
Alvar
btw, por que você tem 32 bits nessa especificação? Isso não faz sentido. Não consigo descobrir o seu problema, quantos servidores diferentes você já tentou? Esta resposta pode ajudar, askubuntu.com/a/44900/10698
Alvar

Respostas:

22

Eu já vi isso também.

Não tenho uma solução, mas tenho uma solução alternativa ( echo 3 | sudo tee /proc/sys/vm/drop_caches) e potencialmente mais informações para que alguém possa levar a investigação adiante.

Não é um problema de rede porque em "Lendo lista de pacotes ..." , está apenas lendo arquivos /var/lib/apt/lists/. UMA:

strace -tt -T -fo strace.log apt-get update

dá:

16394 14:43:03.921130 open("/var/lib/apt/lists/gb.archive.ubuntu.com_ubuntu_dists_precise_main_binary-i386_Packages", O_RDONLY|O_LARGEFILE) = 7 <0.000012>
[...]
16394 14:43:03.995238 read(6, "-3.1ubuntu2)\nConflicts: linux86\n"..., 32444) = 32444 <0.000111>
16394 14:43:05.787187 read(6, "c (<< 1:14.b.4-dfsg), erlang-exa"..., 32239) = 32239 <0.000069>
16394 14:43:05.788025 read(6, ".deb\nSize: 42130\nMD5sum: c7de671"..., 31695) = 31695 <0.000068>
16394 14:43:05.870734 read(6, "5: 29c4b395a92bdc12932f151c3643a"..., 31607) = 31607 <0.000071>
16394 14:43:05.890862 read(6, "e-pack-af-base\nFilename: pool/ma"..., 32538) = 32538 <0.000070>
16394 14:43:05.891425 read(6, "buntu-usb-live, ubuntu-dvd-live,"..., 32090) = 32090 <0.000066>
16394 14:43:05.891960 read(6, "cd9755b03ac2c9b8251125c7b6618\nDe"..., 32195) = 32195 <0.000034>
16394 14:43:06.043001 read(6, "rg>\nArchitecture: all\nVersion: 2"..., 32535) = 32535 <0.000072>

Veja como essas 8 readchamadas do sistema levaram mais de 2 segundos, mesmo que cada chamada individual demore menos de 1 ms. Em execução time apt-get updateou observação top, esse processo não está ocupado entre essas duas chamadas. Então, por que o atraso?

Então eu fiz:

echo t > /proc/sysrq-trigger

algumas vezes e analisou o resultado em kern.log:

 apt-get         D 00000000     0 16790  12706 0x00000000
  e8695d30 00000086 f7bd5e6c 00000000 f7bd5e44 f74a6580 c1990e00 c1990e00
  efe46efe 000042cb f7b9de00 e71a7230 f74a6580 c107e116 00000000 00000000
  044aa200 00000000 00000000 00000000 00000000 e8695d0c e8695d0c c1038de8
 Call Trace:
  [<c107e116>] ? enqueue_entity+0x186/0x220
  [<c1038de8>] ? default_spin_lock_flags+0x8/0x10
  [<c15e13bd>] ? _raw_spin_lock_irqsave+0x2d/0x40
  [<c15e0533>] schedule+0x23/0x60
  [<c15deecf>] schedule_timeout+0x12f/0x290
  [<c1075c38>] ? ttwu_do_activate.constprop.86+0x58/0x70
  [<c1055190>] ? usleep_range+0x40/0x40
  [<c15e0846>] io_schedule_timeout+0x86/0xd0
  [<c15cef7d>] balance_dirty_pages.isra.17+0x3f5/0x4b4
  [<c15e118d>] ? _raw_spin_lock+0xd/0x10
  [<c1180781>] ? __set_page_dirty_buffers+0x81/0xb0
  [<c110deb5>] ? set_page_dirty+0x55/0x60
  [<c11812c9>] ? __block_page_mkwrite+0xe9/0x170
  [<c110f3ae>] balance_dirty_pages_ratelimited_nr+0xde/0x100
  [<c1126f53>] do_wp_page+0x503/0x830
  [<c1128ef7>] handle_pte_fault+0x267/0x2c0
  [<c1129c62>] handle_mm_fault+0x1e2/0x280
  [<c15e4988>] do_page_fault+0x158/0x4c0
  [<c104e4dc>] ? irq_exit+0x5c/0xa0
  [<c15e22d0>] ? do_debug+0x180/0x180
  [<c15e4830>] ? vmalloc_fault+0x195/0x195
  [<c15e1c53>] error_code+0x67/0x6c

Portanto, não sei ao certo o que isso significa, mas que se parece com o tratamento de falhas de página; portanto, aponte para um possível problema de gerenciamento de memória.

Eu então tentei um:

echo 3 >/proc/sys/vm/drop_caches

E isso fez o problema desaparecer.

Agora, parece muito com um problema de kernel. Então, atualizei para o kernel mais recente (3.8 backport de raring) e é aí que estou. Será atualizado se o problema persistir com o kernel mais recente.

Editar

O problema persiste com o novo kernel, embora não seja tão ruim. E a mesma coisa,

echo 3 | sudo tee /proc/sys/vm/drop_caches

resolve o problema por um tempo. Eu só vi isso acontecer em laptops MSI (nome do produto: CR61 2M / CX61 2OC / CX61 2OD).

Editar dezembro de 2015

Conforme confirmado por btrace aptitude/ apt-get, parece fazer algumas E / S de disco no momento. Ele tem um arquivo temporário ( /var/cache/apt/pkgcache.bin.<random-chars>) mmapped na memória e é por isso que ele não aparece na stracesaída.

Ainda não é possível explicar por que isso acontece apenas em algumas máquinas, por que deixar cair caches ajuda, por que mudar para 64 bits ajuda.

Se alguém pode reproduzi-lo, um teste interessante pode ser o de verificar se isso também acontece ao rodar sob eatmydataou se a migração /var/cache/aptpara tmpfsum ramdisk ajuda.

Stéphane Chazelas
fonte
1
Em 5 de abril de 2014, posso confirmar que o problema ainda existe. Testado em: Linux Mint 16, 32 bits, executando no processador de 64 bits, Lenovo W520 e: Kubuntu 12.10 32 bits, executando novamente em hardware de 64 bits, desktop personalizado. (e a solução / solução sugerida aqui também funciona :))
Ferenc Deak
@fritzone, lembro de ter visto o problema relatado em outro lugar onde as pessoas diziam que a mudança para um sistema operacional de 64 bits corrigia o problema.
Stéphane Chazelas
Também pretendo voltar para um sistema operacional de 64 bits. Antes, na área de trabalho, eu tinha a versão 12.10 de 64 bits e não tinha problemas como esse.
Ferenc Deak
O problema ainda existe no ubuntu 14.04 :-(. Sua solução com o eco 3 para drop_caches funcionou. Isso aconteceu após algum comportamento muito complicado do Inkscape com a área de transferência colidindo incorretamente com o Netbeans quando ele abriu 100 caixas de mensagens ou mais ... Mesmo que o Inkscape foi morto, ele deixou um pouco de confusão no sistema que totalmente abrandou apt-get ler os pacotes.
Palo
Também vejo isso em algum momento, e a solução alternativa não funciona para mim. É um sistema operacional de 64 bits aqui, em um laptop samsung com ram i7 e 8G. Apenas uma reinicialização faz o problema desaparecer. Esquisito.
Rmano 28/02
5

O conselho em http://antti-juhani.kaijanaho.fi/newblog/archives/521 acelerou-o várias vezes para mim em vários computadores:

sudo dpkg --clear-avail
sudo sync-available

(O blog também recomendou sudo dpkg --forget-old-unavailentre as duas etapas, mas aparentemente foi preterido e não é mais necessário.)

Beni Cherniavsky-Paskin
fonte
4

Siga os passos:

  • Limpar cache:

    sudo apt-get clean
    
  • Mover o sources.listmodo aptnão pode usá-lo:

    mv /etc/apt/sources.list /etc/apt/sources.list1 && sudo apt-get update
    
  • Mova-o para trás e atualize:

    mv /etc/apt/sources.list1 /etc/apt/sources.list && sudo apt-get update 
    

Verifique e remova todos os PPAs e linhas de origem que você não precisa.

rupert
fonte
1

No meu sistema, a causa foi um valor incorreto na LANGUAGE=variável de ambiente. Ele deve conter valores como en:fr:de, e não en_US.UTF-8,sl_SI.UTF-8:

root@fik:~
# locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8,sl_SI.UTF-8
LC_CTYPE=sl_SI.UTF-8
LC_NUMERIC=sl_SI.UTF-8
LC_TIME=sl_SI.UTF-8
LC_COLLATE=sl_SI.UTF-8
LC_MONETARY=sl_SI.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=sl_SI.UTF-8
LC_NAME=sl_SI.UTF-8
LC_ADDRESS=sl_SI.UTF-8
LC_TELEPHONE=sl_SI.UTF-8
LC_MEASUREMENT=sl_SI.UTF-8
LC_IDENTIFICATION=sl_SI.UTF-8
LC_ALL=

Quando executado (via strace), o apt-get updatecomando clona na read()chamada. Demora muito tempo para ser executado e consome todos os ciclos disponíveis de um núcleo de CPU:

root@fik:~
# strace apt-get update
[snip]
read(5, "form, hardware::opengl, implemen"..., 32146) = 32146
read(5, " Maintainers <pkg-bluetooth-main"..., 32658) = 32658
read(5, ": 17569748\nMD5sum: 9c20d52f9a0d5"..., 32200) = 32200
brk(0x55ac79212000)                     = 0x55ac79212000
read(5, "scription-md5: ca1156b27bec24d4c"..., 32469) = 32469
read(5, " Boost.Math Library\nMulti-Arch: "..., 32477) = 32477
read(5, "epends: libc6 (>= 2.4), lsb-base"..., 32648) = 32648
^C--- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} ---
strace: Process 18452 detached

Se eu definir LANGUAGE=um valor correto (como en), tudo voltará ao normal novamente:

root@fik:~
# export LANGUAGE=en

root@fik:~
# locale
LANG=en_US.UTF-8
LANGUAGE=en
LC_CTYPE=sl_SI.UTF-8
LC_NUMERIC=sl_SI.UTF-8
LC_TIME=sl_SI.UTF-8
LC_COLLATE=sl_SI.UTF-8
LC_MONETARY=sl_SI.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=sl_SI.UTF-8
LC_NAME=sl_SI.UTF-8
LC_ADDRESS=sl_SI.UTF-8
LC_TELEPHONE=sl_SI.UTF-8
LC_MEASUREMENT=sl_SI.UTF-8
LC_IDENTIFICATION=sl_SI.UTF-8
LC_ALL=

root@fik:~
# apt-get update
Hit:1 http://ftp.at.debian.org/debian experimental InRelease
Ign:3 http://ftp.at.debian.org/debian jessie InRelease                                                      
Hit:4 http://ftp.at.debian.org/debian jessie-updates InRelease  
Hit:5 http://ftp.at.debian.org/debian jessie-backports InRelease                                                                             
Hit:6 http://ftp.at.debian.org/debian sid InRelease                                                                    
Hit:7 http://ftp.at.debian.org/debian stretch InRelease                               
Hit:8 http://ftp.at.debian.org/debian stretch-updates InRelease                                             
Hit:9 http://ftp.at.debian.org/debian jessie Release                                  
Hit:2 http://screenshots.getdeb.net xenial-getdeb InRelease                           
Hit:10 http://security.debian.org jessie/updates InRelease      
Hit:11 http://security.debian.org stretch/updates InRelease
Reading package lists... Done 
shkitch
fonte
Ah, e é claro que eu mesmo coloquei o valor incorreto alguns anos atrás. Curiosamente, o apt estava funcionando perfeitamente até ontem, após o II apt-get upgrade 'do sistema (Debian sid).
shkitch
De repente, encontrei isso em uma instalação de 32 bits do Debian Jessie que está funcionando há anos (décadas?). Nada muda na configuração da máquina, mas de repente começou a acontecer. Eu não tenho LANGUAGE = definido para nada, no entanto. Definir como "en" ou usar C para todas as variáveis ​​de localidade LC_ * ainda não ajudou.
Brad Spencer