Чтение списка пакетов занимает вечность


25

Я пытался обновить свои материалы на своем компьютере, и кажется, что он не может прочитать мой список пакетов. Кажется, что каждый раз, когда я делаю это, sudo apt-get install *something* && sudo apt-get updateон застревает при чтении списка пакетов, это не было проблемой раньше. Вот мои характеристики и еще много чего:

  • Память: 15,8 ГБ
  • Процессор: AMD Phenom (tm) II x4 Процессор 965 x 4
  • Графика: Галлий 0,4 на AMD БАРТС
  • Тип ОС: 32-битная
  • Netspeed: введите описание изображения здесь

2
Просто уточняю ... ты говоришь о казни sudo apt-get update, верно?
Джек,

2
В Software Sources, посмотрите, помогает ли выбор другого сервера вместо вашего текущего.

Извините, что не написал больше об этой проблеме. Но вот сделка! каждый раз, когда я запускаю обновление sudo apt-get, sudo apt-get upgrade или «sodu apt-get install что - то », в конце концов, это происходит, но это занимает около 30 минут, пока я читаю список. Я пытался изменить сервер, и это не помогло.
Dre

Каковы характеристики вашего компьютера и вашего интернет-соединения? Отредактируйте свой вопрос с новой информацией, не добавляйте его в комментарии ...
Алвар

Кстати, почему у вас есть 32-разрядные по этой спецификации? Это не имеет никакого смысла. Я не могу понять вашу проблему, сколько разных серверов вы пробовали? Этот ответ может помочь, askubuntu.com/a/44900/10698
Алвар

Ответы:


22

Я тоже это видел.

У меня нет решения, но у меня есть обходной путь ( echo 3 | sudo tee /proc/sys/vm/drop_caches) и потенциально больше информации, чтобы кто-то мог продолжить расследование.

Это не проблема сети, потому что в «Чтение списка пакетов ...» , это просто чтение файлов в /var/lib/apt/lists/. A:

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

дает:

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>

Посмотрите, как эти 8 readсистемных вызовов заняли более 2 секунд, хотя каждый отдельный вызов занимает менее 1 мс. Запуск time apt-get updateили просмотр top, этот процесс не занят между этими двумя вызовами. Так почему задержка?

Тогда я сделал:

echo t > /proc/sysrq-trigger

несколько раз и посмотрел на результат в 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

Итак, не уверен, что это означает, но это относится к обработке ошибок страниц, поэтому указывает на потенциальную проблему управления памятью.

Затем я попробовал:

echo 3 >/proc/sys/vm/drop_caches

И это заставило проблему уйти.

Теперь это очень похоже на проблему с ядром. Итак, я обновился до последней версии ядра (3.8 backport raring) и вот где я. Обновится, если проблема не исчезнет с более новым ядром.

редактировать

Проблема сохраняется с новым ядром, хотя и не так плохо. И то же самое,

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

очищает проблему на некоторое время. Я видел только это на ноутбуках MSI (Название продукта: CR61 2M / CX61 2OC / CX61 2OD).

Изменить декабрь 2015

Как подтверждается btrace aptitude/ apt-get, похоже, в данный момент выполняет некоторые операции дискового ввода-вывода. У него есть временный файл ( /var/cache/apt/pkgcache.bin.<random-chars>), отображенный в памяти, поэтому он не отображается в straceвыводе.

До сих пор не могу объяснить, почему это происходит только на некоторых машинах, почему удаление кешей помогает, почему переключение на 64-битные помогает.

Если кто-то может воспроизвести его, интересным может быть проверка того, происходит ли это и при работе под ним, eatmydataили если переход /var/cache/aptна tmpfsвиртуальный диск помогает.


1
5 апреля 2014 года я могу подтвердить, что проблема все еще существует. Проверено на: Linux Mint 16, 32-разрядная, работает на 64-разрядном процессоре, Lenovo W520 и: Kubuntu 12.10 32-разрядная, снова работает на 64-разрядном оборудовании, настраиваемый рабочий стол. (и предложенное здесь решение / обходной путь также работает :))
Ferenc Deak

@fritzone, я помню, как о проблеме сообщили в другом месте, где люди говорили, что переключение на 64-битную ОС решило проблему.
Стефан Шазелас

Я планирую переключиться обратно на 64-битную ОС тоже. Раньше на рабочем столе у ​​меня была 64-битная версия 12.10, и у меня не было таких проблем.
Ференц Дик

Проблема все еще существует в Ubuntu 14.04 :-(. Ваше решение с echo 3 для drop_caches сработало. Это произошло после некоторого очень глючного поведения Inkscape с некорректно конфликтующим буфером обмена с Netbeans, когда он открыл 100 msgbox или около того ... Даже если Inkscape был убит, это оставило некоторый беспорядок в системе, что полностью замедлило apt-get чтение пакетов
Palo

Я тоже иногда это вижу, и обходной путь не работает для меня. Это 64-битная операционная система на ноутбуке Samsung с i7 и 8G RAM. Только перезагрузка заставит проблему уйти. Weird.
Rmano


4

Следуйте шагам:

  • Очистить кеш:

    sudo apt-get clean
    
  • Переместите sources.listтак, aptне можете использовать это:

    mv /etc/apt/sources.list /etc/apt/sources.list1 && sudo apt-get update
    
  • Переместите его назад, затем обновите:

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

Также проверьте и удалите все PPA и исходные строки, которые вам не нужны.


1

В моей системе причиной было неправильное значение в LANGUAGE=переменной среды. Он должен содержать такие значения, как en:fr:de, а не 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=

Когда запускается (через strace), apt-get updateкоманда клонируется по read()вызову. Это занимает много времени, чтобы выполнить, и съедает все доступные циклы одного ядра процессора:

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

Если я установлю LANGUAGE=правильное значение (например, en), все снова станет нормальным:

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 

О, и, конечно, я сам поставил туда неправильное значение несколько лет назад. Как ни странно, apt работал безупречно до вчерашнего дня, после того как я apt-get обновил систему (Debian sid).
Шкич

Я неожиданно столкнулся с этим на 32-битной установке Debian Jessie, которая работала годами (десятилетиями?). Ничего не изменилось в конфигурации машины, но это вдруг начало происходить. Я не имею LANGUAGE = установлен на что-либо, хотя. Установка его в «en» или использование C для всех переменных локали LC_ * пока не помогли.
Брэд Спенсер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.