Đọc danh sách gói mất mãi mãi


25

Tôi đã cố gắng cập nhật nội dung của mình trên máy và có vẻ như nó không thể đọc danh sách gói của tôi. Có vẻ như mỗi lần tôi làm điều sudo apt-get install *something* && sudo apt-get updateđó bị kẹt khi đọc danh sách gói, điều này không phải là vấn đề trước đây. Đây là thông số kỹ thuật của tôi và không có gì:

  • Bộ nhớ: 15,8 gb
  • Bộ xử lý: AMD Phenom (tm) II x4 965 Bộ xử lý x 4
  • Đồ họa: Gallium 0.4 trên AMD BARTS
  • Loại hệ điều hành: 32-bit
  • Netspeed: nhập mô tả hình ảnh ở đây

2
Chỉ cần làm rõ ... bạn đang nói về việc thực thi sudo apt-get update, đúng không?
Jack

2
Trong Software Sources, xem nếu chọn một máy chủ khác, thay vì máy chủ hiện tại của bạn, sẽ giúp.

Xin lỗi vì đã không viết thêm về vấn đề này. Nhưng đây là thỏa thuận! Mỗi khi tôi chạy một bản cập nhật sudo apt-get, sudo apt-get nâng cấp hoặc 'sodu apt-get install một cái gì đó ' thì cuối cùng nó cũng sẽ nhận được, nhưng phải mất 30 phút để đọc danh sách. Ive đã thử thay đổi máy chủ, và điều đó không giúp được gì.
Dre

Thông số kỹ thuật của máy tính và kết nối internet của bạn là gì? Chỉnh sửa câu hỏi của bạn với thông tin mới, đừng thêm nó vào phần bình luận ...
Alvar

btw, tại sao bạn có 32-bit về đặc điểm kỹ thuật đó? Không có nghĩa lý gì. Tôi không thể tìm ra vấn đề của bạn, bạn đã thử bao nhiêu máy chủ khác nhau? Câu trả lời này có thể giúp ích, hãy hỏi Ubuntu.com / a / 44900/10698
Alvar

Câu trả lời:


22

Tôi cũng đã thấy điều đó.

Tôi không có giải pháp, nhưng tôi có cách giải quyết ( echo 3 | sudo tee /proc/sys/vm/drop_caches) và có khả năng có thêm thông tin để ai đó có thể đưa cuộc điều tra thêm nữa.

Đây không phải là sự cố mạng vì tại "Đọc danh sách gói ..." , đó chỉ là đọc tệp /var/lib/apt/lists/. A:

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

cho:

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>

Xem cách 8 readcuộc gọi hệ thống đó mất hơn 2 giây mặc dù mỗi cuộc gọi riêng lẻ mất ít hơn 1 ms. Chạy time apt-get updatehoặc nhìn top, quá trình đó không bận rộn giữa hai cuộc gọi đó. Vậy tại sao lại trì hoãn?

Sau đó, tôi đã làm:

echo t > /proc/sysrq-trigger

một vài lần và xem kết quả trong 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

Vì vậy, không chắc điều đó có nghĩa là gì nhưng điều đó có vẻ như về việc xử lý lỗi trang, vì vậy chỉ ra vấn đề quản lý bộ nhớ tiềm năng.

Sau đó tôi đã thử một:

echo 3 >/proc/sys/vm/drop_caches

Và điều đó đã làm cho vấn đề biến mất.

Bây giờ, nó rất giống như một vấn đề hạt nhân. Vì vậy, tôi đã cập nhật lên kernel mới nhất (3,8 backport từ raring) và đó là nơi tôi đang ở. Sẽ cập nhật nếu sự cố vẫn còn với kernel mới hơn.

Chỉnh sửa

Vấn đề không tồn tại với kernel mới, mặc dù không tệ như vậy. Và điều tương tự,

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

xóa vấn đề trong một thời gian. Tôi chỉ thấy điều đó xảy ra trên máy tính xách tay MSI (Tên sản phẩm: CR61 2M / CX61 2OC / CX61 2OD).

Chỉnh sửa tháng 12 năm 2015

Như đã xác nhận bởi btrace aptitude/ apt-getkhông xuất hiện để thực hiện một số I / O đĩa tại thời điểm đó. Nó có một tệp tạm thời ( /var/cache/apt/pkgcache.bin.<random-chars>) được ghép vào bộ nhớ, đó là lý do tại sao nó không hiển thị trong straceđầu ra.

Vẫn không thể giải thích lý do tại sao nó chỉ xảy ra trên một số máy mà thôi, tại sao việc xóa bộ nhớ cache lại giúp ích, tại sao chuyển sang 64bit lại giúp ích.

Nếu ai đó có thể tái tạo nó, một thử nghiệm thú vị có thể là xem điều đó cũng xảy ra khi chạy bên dưới eatmydatahoặc nếu di chuyển /var/cache/aptlên tmpfshoặc ramdisk giúp.


1
Vào ngày 5 tháng 4 năm 2014 tôi có thể xác nhận rằng sự cố vẫn còn tồn tại. Đã thử nghiệm trên: Linux Mint 16, 32 bit, chạy trên bộ xử lý 64 bit, Lenovo W520 và: Kubfox 12.10 32 bit, một lần nữa chạy trên phần cứng 64 bit, máy tính để bàn được xây dựng tùy chỉnh. (và giải pháp / cách giải quyết được đề xuất ở đây cũng hoạt động :))
Ferenc Deak

@fritzone, tôi nhớ đã thấy vấn đề được báo cáo ở nơi khác, nơi mọi người nói rằng việc chuyển sang hệ điều hành 64 bit đã khắc phục vấn đề.
Stéphane Chazelas

Tôi dự định chuyển trở lại hệ điều hành 64 bit. Trước đây, trên máy tính để bàn, tôi có phiên bản 64 bit 12.10 và không gặp vấn đề như thế này.
Ferenc Deak

Sự cố vẫn còn tồn tại trên Ubuntu 14.04 :-(. Giải pháp của bạn với echo 3 đến drop_caches đã hoạt động. Điều này đã xảy ra sau một số hành vi rất lỗi của Inkscape với clipboard bị va chạm không chính xác với Netbeans khi nó đã mở 100 hộp thư hoặc ... Mặc dù Inkscape đã bị giết, nó để lại một số mớ hỗn độn trong hệ thống, điều này hoàn toàn làm chậm việc đọc các gói.
Palo

Đôi khi tôi cũng thấy nó và cách giải quyết không hiệu quả với tôi. Đây là một hệ điều hành 64 bit ở đây, trên máy tính xách tay samsung có ram i7 và 8G. Chỉ có một khởi động lại làm cho vấn đề biến mất. Kỳ dị.
Rmano


4

Thực hiện theo các bước:

  • Dọn dẹp bộ đệm:

    sudo apt-get clean
    
  • Di chuyển sources.listđể aptkhông thể sử dụng nó:

    mv /etc/apt/sources.list /etc/apt/sources.list1 && sudo apt-get update
    
  • Di chuyển nó trở lại sau đó cập nhật:

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

Đồng thời kiểm tra và xóa bất kỳ PPA và dòng nguồn nào bạn không cần.


1

Trên hệ thống của tôi, nguyên nhân là một giá trị không chính xác trong LANGUAGE=biến môi trường. Nó nên giữ các giá trị như en:fr:de, và không 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=

Khi chạy (thông qua strace), apt-get updatelệnh sẽ nhân đôi read()cuộc gọi. Phải mất nhiều thời gian để thực thi và ăn tất cả các chu kỳ có sẵn của một lõi 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

Nếu tôi đặt LANGUAGE=thành một giá trị chính xác (chẳng hạn như en), mọi thứ sẽ trở lại bình thường:

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 

Ồ, và dĩ nhiên tôi đã đặt giá trị không chính xác ở đó vài năm trước. Thật thú vị, apt đã hoạt động hoàn hảo cho đến ngày hôm qua, sau khi II apt-get nâng cấp hệ thống (Debian sid).
shkitch

Tôi đã bất ngờ gặp phải điều này trên bản cài đặt 32-bit của Debian Jessie đã hoạt động trong nhiều năm (nhiều thập kỷ?). Không có gì thay đổi trong cấu hình máy, nhưng nó đột nhiên bắt đầu xảy ra. Mặc dù vậy, tôi không có LANGUAGE = đặt thành bất cứ điều gì. Đặt nó thành "en" hoặc sử dụng C cho tất cả các biến cục bộ LC_ * chưa giúp được.
Brad Spencer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.