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

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.


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


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.


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 

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.