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:
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 read
ont 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 top
name__, 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 raring
name__) et voilà où j'en suis. Mettra à jour si le problème persiste avec le nouveau noyau.
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).
Comme confirmé par btrace
aptitude
name __/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 strace
name__.
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 eatmydata
ou si vous déplacez /var/cache/apt
sur tmpfs
ou si un disque mémoire vous aide.
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.
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