Tìm hiểu những gì quá trình đang ghi vào ổ cứng


31

Trên Lenovo T400 và Ubuntu của tôi, đèn báo cho ổ cứng tiếp tục nhấp nháy. Tôi đã tự hỏi nếu trong Linux, có thể tìm ra quá trình nào đang thực hiện I / O cho ổ cứng không? Cũng giống như top, bạn có thể tìm ra quy trình nào đang sử dụng hầu hết CPU và bộ nhớ.

Câu trả lời:


41

Iotop là một công cụ tốt cho những gì bạn muốn. Nó cũng cho phép một người hiển thị số lượng I / O tích lũy trên bất kỳ DISK READ, DISK WRITE, SWAPIN và IO (tỷ lệ phần trăm tổng thể). Điều này là thông qua một giao diện tiện lợi:

  • Bạn chỉ cần nhấn atrên bàn phím, và nó sẽ sắp xếp các quá trình đói nhất trên đầu trang.
  • Đảo ngược thứ tự, bạn chỉ cần nhấn r.
  • Nếu bạn muốn sắp xếp theo các colums khác, bạn chỉ cần nhấn phím trái / phải.

Giống như top, bài thuyết trình khá bận rộn. Một điều nữa là nó không có vô số tùy chọn topcó (ví dụ: tôi không thể chọn ẩn bất kỳ cột nào tôi không quan tâm), nhưng công cụ này không đủ tốt cho mục đích cụ thể của nó.


3
Powertop cũng hữu ích để tìm những gì sử dụng hết pin trên máy tính xách tay; iotop vẫn là nơi đầu tiên để tìm kiếm truy cập đĩa.
Gilles 'SO- đừng trở nên xấu xa'

người ta có thể vượt qua -o( --only) để thực sự lọc ra tất cả các tác vụ không thực hiện bất kỳ I / O nào. Điều này làm cho danh sách ít đông đúc hơn
Marcin Orleansowski

15

Bạn có thể sử dụng lsof( người đàn ông lsof ). Sau đây sẽ trả về một danh sách tất cả các tệp được mở để viết:

lsof | grep -e "[[:digit:]]\+w"

1
Những tập tin nào đang mở và những tập tin nào đang thực sự được truy cập là hai điều khác nhau.
psusi

@psusi Một tệp mở để viết rất có thể bị "truy cập". Ngoài ra, nhiều thông tin có thể được lấy bằng cách học lsof thông qua trang chủ của nó.
James Sumners

5
Các tập tin mở để viết có thể được ghi vào một lúc nào đó, nhưng không nhất thiết phải ngay bây giờ. Nhiều tập tin được giữ mở nhưng hiếm khi được ghi vào. Mặt khác, các tệp được ghi có thể được mở và đóng một cách nhanh chóng và do đó sẽ không hiển thị trong lsof. Dù bằng cách nào, sẽ rất ít giúp tìm ra quá trình thực sự ghi vào đĩa vào lúc này.
psusi

Các wtừ lệnh trên làm cho bạn grep cho các tập tin được mở cho các văn bản chỉ . Các tệp được mở để ghi đọc ( u) sẽ không được hiển thị, nhưng chúng cũng có thể được ghi vào. Nếu bạn muốn xem các tệp được mở để ghi và đọc + ghi, tôi tin rằng đây là những gì bạn đang tìm kiếm:lsof | grep -e "[[:digit:]]\+[wu]\{1\}"
Martijn

1
@Martijn Bạn sẽ muốn sử dụng grep -e**w**để tránh khớp [0-9]\+[wu]trong các cột khác


2

Đặc biệt đối với hoạt động của đĩa thấp, cần sử dụng iotop ở chế độ hàng loạt, để ngăn chặn các dòng truy cập ngắn biến mất nhanh chóng. Câu trả lời bằng cách tôi ghi nhật ký hệ thống tệp đọc / ghi theo tên tệp trong Linux? cho thấy làm thế nào để làm điều này.

Cho đến nay iotoplà giải pháp tổng thể tốt nhất. Lệnh sau cung cấp cho bạn một đầu ra thời gian thực của tất cả các quy trình sử dụng đĩa.

iotop -bktoqqq -d .5

where: -b     is batch mode
       -k     is kilobytes/s
       -t     adds timestamp
       -o     only show processes or threads actually doing I/O
       -qqq   removes output headers
       -d .5  updates every .5 seconds

Khi bạn có id tiến trình, bạn cũng có thể tìm thấy các tệp với

 lsof -p $PID

1
Làm thế nào để câu trả lời này khác với các câu trả lời (rất cũ) ở trên? Thật tốt khi trả lời một câu hỏi cũ để giải thích câu trả lời của bạn khác với câu trả lời trước đó như thế nào. Điều này giúp người đọc sắp xếp trong số các câu trả lời.
Stephen Rauch

Cảm ơn đã chỉ ra điều này. Tôi đã chỉnh sửa câu trả lời này đưa nhận xét của bạn vào tài khoản.
Frank Breitling
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.