Czytanie listy pakietów trwa wiecznie

25

Próbowałem zaktualizować swoje rzeczy na moim komputerze i wygląda na to, że nie mogę odczytać mojej listy pakietów. Wygląda na to, że za każdym razem, gdy sudo apt-get install *something* && sudo apt-get updateto robię , blokuje się czytanie listy pakietów, nie było to wcześniej problemem. Oto moje specyfikacje i tak dalej:

  • Pamięć: 15,8 GB
  • Procesor: AMD Phenom (tm) II x4 965 Procesor x 4
  • Grafika: Gallium 0.4 na AMD BARTS
  • Typ systemu operacyjnego: 32-bit
  • Prędkość internetu : wprowadź opis zdjęcia tutaj
Dre
źródło
2
Tylko wyjaśnienie ... mówisz o wykonywaniu sudo apt-get update, prawda?
Jack
2
W Software Sourceszobacz, czy wybranie innego serwera zamiast obecnego pomaga.
Przepraszam, że nie napisałem więcej o tym problemie. Ale oto oferta! za każdym razem, gdy uruchamiam aktualizację sudo apt-get, sudo apt-get upgrade lub „sodu apt-get install coś ”, to w końcu do niej dojdzie, ale zajmuje 30 minut, aby przeczytać listę. Próbowałem zmienić serwer, ale to nie pomogło.
Dre
Jakie są dane techniczne komputera i połączenia internetowego? Edytuj swoje pytanie, dodając nowe informacje, nie dodawaj go w komentarzach ...
Alvar,
btw, dlaczego masz 32-bitową specyfikację? To nie ma sensu. Nie mogę jednak ustalić twojego problemu, ile różnych serwerów próbowałeś? Ta odpowiedź może pomóc, askubuntu.com/a/44900/10698
Alvar

Odpowiedzi:

22

Też to widziałem.

Nie mam rozwiązania, ale mam obejście ( echo 3 | sudo tee /proc/sys/vm/drop_caches) i potencjalnie więcej informacji, aby ktoś mógł kontynuować śledztwo.

To nie jest problem z siecią, ponieważ w „Czytanie listy pakietów ...” , po prostu odczytuje pliki /var/lib/apt/lists/. ZA:

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

daje:

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>

Zobacz, jak 8 readwywołań systemowych trwało ponad 2 sekundy, chociaż każde pojedyncze połączenie trwa krócej niż 1 ms. time apt-get updatePodczas uruchamiania lub patrzenia topten proces nie jest zajęty między tymi dwoma połączeniami. Skąd więc to opóźnienie?

Potem zrobiłem:

echo t > /proc/sysrq-trigger

kilka razy i spojrzał na wynik w 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

Nie wiem, co to znaczy, ale to dotyczy obsługi błędów strony, wskazuje więc na potencjalny problem z zarządzaniem pamięcią.

Następnie spróbowałem:

echo 3 >/proc/sys/vm/drop_caches

I to sprawiło, że problem zniknął.

Teraz bardzo przypomina problem z jądrem. Więc zaktualizowałem do najnowszego jądra (backport 3.8 z raring) i tam jestem. Zaktualizuje się, jeśli problem będzie się powtarzał w nowszym jądrze.

Edytować

Problem utrzymuje się w nowym jądrze, choć nie tak źle. I to samo

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

na jakiś czas usuwa problem. Widziałem to tylko na laptopach MSI (Nazwa produktu: CR61 2M / CX61 2OC / CX61 2OD).

Edytuj grudzień 2015 r

Jak potwierdzono przez btrace aptitude/ apt-getwydaje się, że w tym momencie wykonuje pewne operacje we / wy dysku. Ma tymczasowy plik ( /var/cache/apt/pkgcache.bin.<random-chars>) zmapowany w pamięci, dlatego nie wyświetla się w danych stracewyjściowych.

Nadal nie mogę wyjaśnić, dlaczego dzieje się to tylko na niektórych komputerach, dlaczego upuszczanie pamięci podręcznych pomaga, dlaczego przejście na 64-bitowe pomaga.

Jeśli ktoś może to odtworzyć, ciekawym testem może być sprawdzenie, czy dzieje się tak również podczas biegania pod nim, eatmydataczy poruszanie się /var/cache/aptna nim tmpfslub pomoc ramdysku.

Stéphane Chazelas
źródło
1
5 kwietnia 2014 r. Mogę potwierdzić, że problem nadal występuje. Testowany na: Linux Mint 16, 32-bitowy, działający na 64-bitowym procesorze, Lenovo W520 i: Kubuntu 12.10 32-bitowy, ponownie uruchomiony na 64-bitowym sprzęcie, niestandardowy komputer stacjonarny. (i sugerowane tutaj rozwiązanie / obejście również działa :))
Ferenc Deak,
@fritzone, pamiętam, że problem został zgłoszony w innym miejscu, gdzie ludzie mówili, że przejście na 64-bitowy system operacyjny rozwiązało problem.
Stéphane Chazelas,
Planuję również wrócić do 64-bitowego systemu operacyjnego. Wcześniej na komputerze miałem 64-bitową wersję 12.10 i nie miałem takich problemów.
Ferenc Deak,
Problem nadal występuje w Ubuntu 14.04 :-(. Twoje rozwiązanie z echo 3 do drop_cache zadziałało. Stało się to po bardzo błędnym zachowaniu Inkscape ze schowkiem niepoprawnie zderzającym się z Netbeans, gdy otworzył 100 msgbox lub więcej ... Mimo że Inkscape został zabity, pozostawiło trochę bałaganu w systemie, co całkowicie spowolniło apt-get czytanie paczek
Palo
Ja też to kiedyś widzę, a obejście nie działa dla mnie. Jest to 64-bitowy system operacyjny tutaj, na laptopie Samsung z i7 i 8G RAM. Tylko ponowne uruchomienie powoduje, że problem zniknie. Dziwne.
Rmano
5

Porada pod adresem http://antti-juhani.kaijanaho.fi/newblog/archives/521 przyspieszyła mnie kilka razy na różnych komputerach:

sudo dpkg --clear-avail
sudo sync-available

(Blog zalecał również sudo dpkg --forget-old-unavailmiędzy 2 krokami, ale najwyraźniej jest przestarzały i nie jest już potrzebny).

Beni Cherniavsky-Paskin
źródło
4

Wykonaj kroki:

  • Wyczyść pamięć podręczną:

    sudo apt-get clean
    
  • Przenieś, sources.listwięc aptnie możesz go użyć:

    mv /etc/apt/sources.list /etc/apt/sources.list1 && sudo apt-get update
    
  • Przesuń go z powrotem, a następnie zaktualizuj:

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

Sprawdź i usuń niepotrzebne PPA i wiersze źródłowe.

Rupert
źródło
1

W moim systemie przyczyną była niepoprawna wartość LANGUAGE=zmiennej środowiskowej. Powinien zawierać takie wartości en:fr:de, a nie 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=

Po uruchomieniu (przez strace) apt-get updatepolecenie klonuje read()połączenie. Wykonanie go zajmuje wieki i zjada wszystkie dostępne cykle jednego rdzenia procesora:

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

Jeśli ustawię LANGUAGE=prawidłową wartość (np. en), Wszystko wróci do normy:

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 
suka
źródło
Aha, i oczywiście kilka lat temu sam przypisałem sobie niewłaściwą wartość. Co zabawne, apt działał bezbłędnie do wczoraj, po II apt-get upgrade systemu (sid Debiana).
shkitch,
Nagle zetknąłem się z tym w 32-bitowej instalacji Debiana Jessie, która działała przez lata (dekady?). Nic się nie zmienia w konfiguracji maszyny, ale nagle zaczęło się dziać. Jednak nie mam LANGUAGE = ustawiony na cokolwiek. Ustawienie go na „en” lub użycie C dla wszystkich zmiennych regionalnych LC_ * jeszcze nie pomogło.
Brad Spencer,