永久阅读包裹清单


25

我一直在尝试更新计算机上的资料,但似乎无法读取我的软件包列表。似乎每次我这样做sudo apt-get install *something* && sudo apt-get update都会卡在阅读包装清单中,这以前从来不是问题。这是我的规格,没什么:

  • 记忆体:15.8 GB
  • 处理器:AMD Phenom(tm)II x4 965处理器x 4
  • 显卡:AMD BARTS上的镓0.4
  • 操作系统类型:32位
  • 网速: 在此处输入图片说明

2
只是澄清一下...您在谈论执行sudo apt-get update,对吗?
杰克

2
在中Software Sources,查看选择其他服务器(而不是当前服务器)是否有帮助。

很抱歉没有写更多有关此问题的信息。但是,这是交易!每次我运行sudo apt-get更新,sudo apt-get升级或“ sodu apt-get安装某些东西 ”时,它最终都会得到解决,但是读取列表大约需要30分钟。香港专业教育学院试图改变服务器,并没有帮助。
Dre

您的计算机和Internet连接的规格是什么?使用新信息编辑您的问题,请不要在评论中添加...
Alvar

顺便说一句,为什么在该规范上有32位?这没有道理。但是,我无法弄清您的问题,您尝试了多少台不同的服务器?这个答案可能会有所帮助,askubuntu.com/a/44900/10698
Alvar

Answers:


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年12月

正如btrace aptitude/ 确认的,apt-get当时确实确实在做一些磁盘I / O。它/var/cache/apt/pkgcache.bin.<random-chars>在内存中映射了一个临时文件(),这就是为什么它不显示在strace输出中的原因。

仍然无法解释为什么它仅在某些机器上发生,为什么删除缓存有帮助,为什么切换到64位有帮助。

有没有人能复制它,一个有趣的测试可以看到如果下运行时也发生eatmydata或者移动/var/cache/apttmpfs或RAMDISK帮助。


1
我可以在2014年4月5日确认问题仍然存在。经过测试:Linux Mint 16、32位,运行在64位处理器,Lenovo W520和:Kubuntu 12.10 32位,再次运行在64位硬件,定制桌面上。(并且这里建议的解决方案/解决方案也有效:))
Ferenc Deak 2014年

@fritzone,我记得曾经在其他地方说过这个问题,当时有人说切换到64位操作系统可以解决此问题。
斯特凡Chazelas

我计划也切换回64位操作系统。以前,在台式机上我有64位版本的12.10,并且没有这样的问题。
Ferenc Deak 2014年

问题仍然存在于ubuntu 14.04上:-(.。您对drop_caches使用echo 3的解决方案有效。在Inkscape的一些非常错误的行为与剪贴板错误地与Netbeans冲突后,当它打开100个msgboxes左右时,就发生了这种情况。即使Inkscape被打死,它在系统中留下的一些混乱这完全放缓apt-get的读取包。
帕洛阿尔托

我有时也会看到它,但解决方法对我不起作用。这是带有i7和8G ram的三星笔记本电脑上的64位操作系统。只有重启才能使问题消失。奇怪的。
Rmano 2015年


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()调用中中断。执行需要花费很多时间,并且会占用一个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

如果我将其设置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-get升级了系统(Debian sid)之后,apt一直可以正常工作。
shkitch '16

我在32岁的Debian Jessie安装中突然遇到了这个问题,它已经使用了很多年(数十年?)。机器配置没有任何变化,但突然开始发生。我没有将LANGUAGE =设置为任何值。将其设置为“ en”或对所有LC_ *语言环境变量使用C都没有帮助。
布拉德·斯宾塞
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.