การอ่านรายการแพ็กเกจใช้เวลาตลอดไป


25

ฉันพยายามอัปเดตสิ่งต่าง ๆ บนเครื่องของฉันและดูเหมือนว่ามันไม่สามารถอ่านรายชื่อแพ็คเกจของฉันได้ ดูเหมือนว่าทุกครั้งที่ฉันทำsudo apt-get install *something* && sudo apt-get updateมันติดอยู่ที่รายการแพคเกจการอ่านนี่ไม่เคยมีปัญหามาก่อน นี่คือรายละเอียดและ whatnot ของฉัน:

  • หน่วยความจำ: 15.8 gb
  • หน่วยประมวลผล: AMD Phenom (tm) II x4 965 โปรเซสเซอร์ x 4
  • กราฟิก: Gallium 0.4 บน AMD BARTS
  • ประเภทระบบปฏิบัติการ: 32 บิต
  • เนทสปีด: ป้อนคำอธิบายรูปภาพที่นี่

2
แค่ชี้แจง ... คุณกำลังพูดถึงการดำเนินการsudo apt-get updateถูกต้อง?
แจ็ค

2
ในSoftware Sourcesดูว่าการเลือกเซิร์ฟเวอร์อื่นแทนที่จะเป็นเซิร์ฟเวอร์ปัจจุบันของคุณจะช่วยได้หรือไม่

ขออภัยที่ไม่ได้เขียนเกี่ยวกับปัญหานี้เพิ่มเติม แต่นี่คือข้อตกลง! ทุกครั้งที่ฉันเรียกใช้อัปเดต sudo apt-get, sudo apt-get upgrade หรือ 'sodu apt-get install some ' มันจะไปถึงมันในที่สุด, แต่มันใช้เวลา 30 นาทีเมื่ออ่านผ่านรายการ. ฉันพยายามเปลี่ยนเซิร์ฟเวอร์และนั่นก็ไม่ได้ช่วย
Dre

ข้อมูลจำเพาะของคอมพิวเตอร์และการเชื่อมต่ออินเทอร์เน็ตของคุณคืออะไร แก้ไขคำถามของคุณด้วยข้อมูลใหม่อย่าเพิ่มลงในความคิดเห็น ...
อัลวาร์

btw ทำไมคุณถึงมี 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เรียกระบบทั้ง8 ระบบใช้เวลา 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)

แก้ไขธันวาคม 2558

ตามที่ได้รับการยืนยันโดยbtrace aptitude/ apt-getจะทำดิสก์ I / O บางส่วนในเวลานั้น มีไฟล์ชั่วคราว ( /var/cache/apt/pkgcache.bin.<random-chars>) mmapped ในหน่วยความจำซึ่งเป็นสาเหตุที่ไม่แสดงในstraceเอาต์พุต

ยังไม่สามารถอธิบายได้ว่าทำไมมันจึงเกิดขึ้นกับเครื่องบางเครื่องเท่านั้นเหตุใดการปล่อยแคชจึงช่วยได้ทำไมจึงเปลี่ยนเป็น 64 บิตช่วย

หากใครบางคนสามารถทำซ้ำการทดสอบที่น่าสนใจอาจจะดูว่ามันเกิดขึ้นเมื่อทำงานภายใต้eatmydataหรือถ้าย้าย/var/cache/aptไปtmpfsหรือ ramdisk ช่วย


1
ในวันที่ 5 เมษายน 2014 ฉันสามารถยืนยันได้ว่าปัญหายังคงมีอยู่ ทดสอบกับ: Linux Mint 16, 32 บิต, รันบนโปรเซสเซอร์ 64 บิต, Lenovo W520 และ: Kubuntu 12.10 32 บิต, ทำงานอีกครั้งบนฮาร์ดแวร์ 64 บิต, เดสก์ท็อปที่สร้างขึ้นเอง (และวิธีแก้ปัญหา / วิธีแก้ปัญหาที่แนะนำที่นี่ก็ใช้งานได้เช่นกัน))
Ferenc Deak

@ fritzone ฉันจำได้ว่าเห็นปัญหารายงานที่อื่นที่มีคนบอกว่าเปลี่ยนไปใช้ระบบปฏิบัติการ 64 บิตแก้ไขปัญหา
Stéphane Chazelas

ฉันวางแผนที่จะเปลี่ยนกลับไปใช้ระบบปฏิบัติการ 64 บิตเช่นกัน ก่อนหน้าบนเดสก์ท็อปฉันมีรุ่น 64 บิตเป็น 12.10 และไม่มีปัญหาเช่นนี้
Ferenc Deak

ปัญหายังคงมีอยู่ใน Ubuntu 14.04 :-( วิธีแก้ปัญหาของคุณกับ echo 3 ถึง drop_caches ทำงานเกิดขึ้นหลังจากพฤติกรรมของ buggy ของ Inkscape กับคลิปบอร์ดผิดพลาดกับ Netbeans อย่างไม่ถูกต้องเมื่อเปิด 100 msgboxes หรือมากกว่านั้น ... แม้ว่า Inkscape ถูกฆ่ามันทิ้งระเบียบบางอย่างในระบบที่ชะลอตัวลงโดยสิ้นเชิง apt-get อ่านแพคเกจ.
พาโลอัล

ฉันเห็นมันบ้างเช่นกันและวิธีแก้ปัญหาใช้ไม่ได้สำหรับฉัน นี่เป็นระบบปฏิบัติการ 64 บิตบนแล็ปท็อปซัมซุงที่มี i7 และ 8G ram การรีบูตเท่านั้นทำให้ปัญหาหายไป แปลก.
Rmano

5

คำแนะนำที่http://antti-juhani.kaijanaho.fi/newblog/archives/521ทำให้ฉันใช้คอมพิวเตอร์หลาย ๆ ครั้ง:

sudo dpkg --clear-avail
sudo sync-available

(บล็อกแนะนำsudo dpkg --forget-old-unavailระหว่าง 2 ขั้นตอน แต่เห็นได้ชัดว่าเลิกใช้แล้วและไม่ต้องการอีกต่อไป)


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 core หนึ่งตัว:

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)
shkitch

ฉันได้พบสิ่งนี้ในการติดตั้ง Debian Jessie แบบ 32 บิตที่ใช้งานมานานหลายปี ไม่มีอะไรเปลี่ยนแปลงในการกำหนดค่าเครื่อง แต่มันก็เริ่มเกิดขึ้นทันที แม้ว่าฉันไม่ได้ตั้งค่า LANGUAGE เป็นอะไรก็ตาม การตั้งค่าเป็น "en" หรือการใช้ C สำหรับตัวแปร LC_ * locale ทั้งหมดยังไม่ได้ช่วย
แบรดสเป็นเซอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.