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 read
cuộ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 update
hoặ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-get
khô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 eatmydata
hoặc nếu di chuyển /var/cache/apt
lên tmpfs
hoặc ramdisk giúp.
sudo apt-get update
, đúng không?