Câu trả lời:
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:
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 top
có (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ó.
-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
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"
w
từ 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 và đọ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\}"
Sử dụng strace
.
Đặ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
iotop
là 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