パッケージリストの読み取りに時間がかかる


25

私は自分のマシンで自分のものを更新しようとしましたが、パッケージリストを読み取れないようです。sudo apt-get install *something* && sudo apt-get updateパッケージリストを読むのにこだわるたびに、これは以前は問題ではなかったようです。ここに私の仕様とその他があります:

  • メモリー:15.8 gb
  • プロセッサー:AMD Phenom(tm)II x4 965 Processor x 4
  • グラフィック:AMD BARTS上のGallium 0.4
  • OSタイプ:32ビット
  • Netspeed: ここに画像の説明を入力してください

2
明確にするだけです...あなたは実行について話しているのsudo apt-get updateですか?
ジャック

2
中には、Software Sources別のサーバーを選択した場合、助け、代わりにあなたの現在の1の、参照してください。

この問題についてこれ以上書いていないのが残念です。しかし、ここに取引があります!sudo apt-get update、sudo apt-get upgrade、または 'sodu apt-get install something 'を実行するたびに、最終的には取得できますが、リストを読むのに30分かかります。私はサーバーを変更しようとしましたが、それは役に立ちませんでした。
ドレ

コンピューターとインターネット接続の仕様は何ですか?新しい情報を使用して質問を編集し、コメントに追加しないでください
。--Alvar

ところで、なぜその仕様に32ビットがあるのですか?意味がない。あなたの問題を理解することはできませんが、いくつのサーバーを試しましたか?この回答は、askubuntu.com / a / 44900/10698
Alvar

回答:


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>

read個々のコールの所要時間が1ミリ秒未満であるにもかかわらず、これらの8つのシステムコールが2秒以上かかったことを確認してください。を実行time apt-get updateまたは見るとtop、そのプロセスはこれらの2つの呼び出しの間でビジーではありません。なぜ遅延なのか?

それから私はやった:

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バックポート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/apt上に移動するtmpfsか、ラムディスクが役立つかどうかを確認することです。


1
2014年4月5日に、問題がまだ存在することを確認できます。テスト対象:Linux Mint 16、32ビット、64ビットプロセッサで実行、Lenovo W520、およびKubuntu 12.10 32ビット、64ビットハードウェアで実行、カスタムビルドデスクトップ。(およびソリューションは、/も動作します:)ここで提案回避)
デアークフェレンツ

@ fritzone、64ビットOSに切り替えると問題が解決したと人々が言っ​​ていた他の場所で報告された問題を見たことを覚えています。
ステファンシャゼル14

64ビットOSに切り替える予定です。以前は、デスクトップ上に12.10の64ビットバージョンがあり、このような問題はありませんでした。
フェレンツディーク14

問題はまだubuntu 14.04に存在します:それは完全にapt-getのパッケージを読んをスローダウンシステムでいくつかの混乱を残した、殺された。
パロ

私もそれをいつか見ます、そして、回避策は私のために働きません。ここでは、i7および8G ramを搭載したsamsungラップトップ上の64ビットオペレーティングシステムです。再起動するだけで問題は解決します。奇妙な。
-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()呼び出しでクロンクします。実行には何年もかかり、1つの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 

ああ、もちろん、数年前に自分で間違った値を入力しました。Funnily十分な、aptのは後に、昨日までは完璧に働いていたII apt-getのアップグレード「(DebianはSID)システムはd。
shkitch 16

Debian Jessieの32ビットインストールで、長年(10年か?)働いていたときに突然これに遭遇しました。マシン構成に変化はありませんが、突然発生し始めました。ただし、LANGUAGE =には何も設定していません。それを「en」に設定するか、すべてのLC_ *ロケール変数にCを使用しても、まだ役に立ちませんでした。
ブラッドスペンサー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.