La lettura dell'elenco dei pacchetti richiede un'eternità


25

Ho provato ad aggiornare le mie cose sul mio computer e sembra che non riesca a leggere l'elenco dei miei pacchetti. Sembra che ogni volta che lo faccio sudo apt-get install *something* && sudo apt-get updaterimanga bloccato nella lettura dell'elenco dei pacchetti, questo non è stato un problema prima. Ecco le mie specifiche e quant'altro:

  • Memoria: 15,8 gb
  • Processore: AMD Phenom (tm) II x4 965 Processore x 4
  • Grafica: Gallio 0.4 su AMD BARTS
  • Tipo di sistema operativo: 32 bit
  • Velocità della rete: inserisci qui la descrizione dell'immagine

2
Sto solo chiarendo ... stai parlando di esecuzione sudo apt-get update, giusto?
Jack,

2
In Software Sources, vedere se la selezione di un altro server, anziché quello attuale, aiuta.

Ci scusiamo per non aver scritto di più su questo problema. Ma ecco l'affare! ogni volta che eseguo un sudo apt-get update, sudo apt-get upgrade o 'sodu apt-get install qualcosa ' alla fine ci riuscirà, ma ci vogliono 30 minuti per leggere l'elenco. Ho provato a cambiare server e questo non ha aiutato.
Dre

Quali sono le specifiche del tuo computer e della tua connessione Internet? Modifica la tua domanda con nuove informazioni non aggiungerla nei commenti ...
Alvar,

a proposito, perché hai 32 bit su quella specifica? Non ha senso. Tuttavia, non riesco a capire il tuo problema, quanti server diversi hai provato? Questa risposta potrebbe essere di aiuto, askubuntu.com/a/44900/10698
Alvar,

Risposte:


22

L'ho visto anche io.

Non ho una soluzione, ma ho una soluzione alternativa ( echo 3 | sudo tee /proc/sys/vm/drop_caches) e potenzialmente più informazioni in modo che qualcuno possa portare avanti l'indagine.

Non è un problema di rete perché in "Lettura dell'elenco dei pacchetti ..." , sta solo leggendo i file /var/lib/apt/lists/. UN:

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>

Guarda come queste 8 readchiamate di sistema hanno impiegato oltre 2 secondi anche se ogni singola chiamata impiega meno di 1 ms. In esecuzione time apt-get updateo guardando top, quel processo non è occupato tra quelle due chiamate. Allora perché il ritardo?

Quindi ho fatto:

echo t > /proc/sysrq-trigger

alcune volte e ho esaminato il risultato in 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

Quindi, non sono sicuro di cosa significhi, ma riguarda la gestione degli errori di pagina, quindi indica un potenziale problema di gestione della memoria.

Ho quindi provato un:

echo 3 >/proc/sys/vm/drop_caches

E questo ha fatto sparire il problema.

Ora sembra davvero un problema del kernel. Quindi, ho aggiornato all'ultimo kernel (3.8 backport da raring) ed è qui che mi trovo. Si aggiornerà se il problema persiste con il kernel più recente.

modificare

Il problema persiste con il nuovo kernel, anche se non così grave. E stessa cosa,

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

cancella il problema per un po '. L'ho visto succedere solo sui laptop MSI (Nome prodotto: CR61 2M / CX61 2OC / CX61 2OD).

Modifica dicembre 2015

Come confermato da btrace aptitude/ apt-getsembra fare un po 'di I / O su disco al momento. Ha un file temporaneo ( /var/cache/apt/pkgcache.bin.<random-chars>) creato in memoria, motivo per cui non viene visualizzato stracenell'output.

Non riesco ancora a spiegare perché ciò accada solo su alcune macchine, perché eliminare la cache aiuta, perché passare a 64 bit aiuta.

Se qualcuno è in grado di riprodurlo, un test interessante potrebbe essere quello di vedere se ciò accade anche quando si esegue sotto eatmydatao se lo spostamento /var/cache/aptsu tmpfso un ramdisk aiuta.


1
Il 5 aprile 2014 posso confermare che il problema persiste. Testato su: Linux Mint 16, 32 bit, in esecuzione su processore a 64 bit, Lenovo W520 e: Kubuntu 12.10 a 32 bit, ancora in esecuzione su hardware a 64 bit, desktop personalizzato. (e la soluzione / soluzione suggerita qui funziona anche :):
Ferenc Deak

@fritzone, ricordo di aver visto il problema segnalato altrove in cui la gente diceva che il passaggio a un sistema operativo a 64 bit ha risolto il problema.
Stéphane Chazelas,

Ho intenzione di tornare anche a un sistema operativo a 64 bit. Prima, sul desktop avevo una versione a 64 bit di 12.10 e non avevo problemi come questo.
Ferenc Deak,

Il problema persiste ancora su Ubuntu 14.04 :-(. La tua soluzione con eco 3 a drop_caches ha funzionato. Questo è successo dopo un comportamento molto errato di Inkscape con appunti che si scontrano erroneamente con Netbeans quando ha aperto circa 100 msgbox ... Anche se Inkscape fu ucciso, lasciò un po 'di casino nel sistema che rallentò completamente apt-get leggendo i pacchetti.
Palo

Lo vedo anche a volte, e la soluzione alternativa non funziona per me. È un sistema operativo a 64 bit qui, su un laptop Samsung con RAM i7 e 8G. Solo un riavvio risolve il problema. Strano.
Rmano,


4

Segui i passi:

  • Svuota cache:

    sudo apt-get clean
    
  • Sposta il sources.listquindi aptnon puoi usarlo:

    mv /etc/apt/sources.list /etc/apt/sources.list1 && sudo apt-get update
    
  • Sposta indietro e aggiorna:

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

Controlla e rimuovi anche eventuali PPA e linee di origine che non ti servono.


1

Sul mio sistema, la causa era un valore errato nella LANGUAGE=variabile d'ambiente. Dovrebbe contenere valori come en:fr:de, e non 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 eseguito (via strace), il apt-get updatecomando clona sulla read()chiamata. Ci vogliono anni per eseguire e mangia tutti i cicli disponibili di un core della 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 imposto LANGUAGE=un valore corretto (come en), tutto torna di nuovo normale:

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 

Oh, e ovviamente ho messo lì il valore errato da solo alcuni anni fa. Stranamente, apt funzionava alla perfezione fino a ieri, dopo che II apt-get ha aggiornato il sistema (Debian sid).
shkitch,

L'ho improvvisamente riscontrato su un'installazione a 32 bit di Debian Jessie che funziona da anni (decenni?). Non è cambiato nulla nella configurazione della macchina, ma all'improvviso ha iniziato a succedere. Non ho LANGUAGE = impostato su nulla, però. Impostarlo su "en" o usare C per tutte le variabili locali di LC_ * non ha ancora aiutato.
Brad Spencer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.