web-dev-qa-db-fra.com

Lire une liste de paquets prend une éternité

J'ai essayé de mettre à jour mes fichiers sur ma machine et il semble que ma liste de paquets ne puisse pas être lue. Il semble que chaque fois que je fais le Sudo apt-get install *something* && Sudo apt-get update, il reste bloqué à la lecture de la liste des paquets, cela n’a pas posé de problème auparavant. Voici mes spécifications et tout le reste:

  • Mémoire: 15,8 gb
  • Processeur: Processeur AMD Phenom (tm) II x4 965 x 4
  • Graphisme: Gallium 0.4 sur AMD BARTS
  • Type de système d'exploitation: 32 bits
  • Netspeed: enter image description here
25
Dre

J'ai vu ça aussi.

Je n'ai pas de solution, mais j'ai une solution de contournement (echo 3 | Sudo tee /proc/sys/vm/drop_caches) et potentiellement plus d'informations pour que quelqu'un puisse faire avancer l'enquête.

Ce n'est pas un problème de réseau car à "Lecture de la liste de paquets ...", il ne fait que lire des fichiers dans /var/lib/apt/lists/. UNE:

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

donne:

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>

Découvrez comment ces 8 appels système readont duré plus de 2 secondes même si chaque appel individuel a pris moins de 1 ms. Si vous exécutez time apt-get update ou topname__, ce processus n’est pas occupé entre ces deux appels. Alors pourquoi le retard?

Puis j'ai fait:

echo t > /proc/sysrq-trigger

à quelques reprises et a examiné le résultat dans 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

Donc, je ne sais pas ce que cela signifie, mais cela concerne le traitement des fautes de page et pointe donc vers un problème potentiel de gestion de la mémoire.

J'ai alors essayé un:

echo 3 >/proc/sys/vm/drop_caches

Et cela a fait disparaître le problème.

Maintenant, cela ressemble beaucoup à un problème de noyau. Donc, j'ai mis à jour le dernier noyau (backport 3.8 depuis raringname__) et voilà où j'en suis. Mettra à jour si le problème persiste avec le nouveau noyau.

Modifier

Le problème persiste avec le nouveau noyau, mais pas autant. Et même chose,

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

efface le problème pendant un moment. Je n'ai vu cela arriver que sur des ordinateurs portables MSI (Nom du produit: CR61 2M/CX61 2OC/CX61 2OD).

Edit décembre 2015

Comme confirmé par btraceaptitudename __/apt-get semble effectuer certaines E/S de disque à ce moment-là. Son fichier temporaire (/var/cache/apt/pkgcache.bin.<random-chars>) est mappé en mémoire, raison pour laquelle il n'apparaît pas dans la sortie stracename__.

Vous ne pouvez toujours pas expliquer pourquoi cela ne se produit que sur certaines machines, pourquoi supprimer des caches aide, pourquoi passer à 64 bits aide.

Si quelqu'un peut le reproduire, un test intéressant pourrait consister à vérifier si cela se produit également lorsque vous exécutez l'exécution sous eatmydataou si vous déplacez /var/cache/apt sur tmpfsou si un disque mémoire vous aide.

22
Stéphane Chazelas

Le conseil de http://antti-juhani.kaijanaho.fi/newblog/archives/521 m'a accéléré à plusieurs reprises sur divers ordinateurs:

Sudo dpkg --clear-avail
Sudo sync-available

(Le blog a également recommandé Sudo dpkg --forget-old-unavail entre les 2 étapes, mais apparemment, il est obsolète et n'est plus nécessaire.)

Suis les étapes:

  • Nettoyer le cache:

    Sudo apt-get clean
    
  • Déplacez le sources.list afin que apt ne puisse pas l'utiliser:

    mv /etc/apt/sources.list /etc/apt/sources.list1 && Sudo apt-get update
    
  • Déplacez-le puis mettez à jour:

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

Vérifiez également et supprimez les PPA et les lignes sources dont vous n’avez pas besoin.

4
rupert

Sur mon système, la cause était une valeur incorrecte dans la variable d'environnement LANGUAGE=. Il devrait contenir des valeurs telles que en:fr:de et non pas 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=

Lorsqu'elle est exécutée (via strace), la commande apt-get update clonque lors de l'appel read(). Cela prend du temps à exécuter et consomme tous les cycles disponibles d'un coeur de processeur:

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

Si je règle LANGUAGE= sur une valeur correcte (telle que en), tout revient à la 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 
1
shkitch