iotop là một lệnh dòng trong hệ điều hành Linux được dùng để giám sát, hiển thị hoạt động đọc/ghi dữ liệu (I/O) trên ổ đĩa của hệ thống theo thời gian thực. Trong bài viết này, mình sẽ hướng dẫn bạn cách sử dụng lệnh iotop để giám sát I/O trong Linux, từ đó tối ưu hiệu năng tổng thể cho server hoặc VPS của mình.
Những điểm chính
- Khái niệm lệnh iotop: Hiểu rõ khái niệm và chức năng của
iotop, công cụ dòng lệnh chuyên dụng để giám sát hoạt động I/O đĩa theo thời gian thực. - Cú pháp và tùy chọn: Nắm vững cấu trúc lệnh cơ bản và các tùy chọn phổ biến như
-o,-b,-pđể tùy chỉnh việc giám sát. - Hướng dẫn cài đặt: Biết cách kiểm tra yêu cầu hệ thống và cài đặt
iotopnhanh chóng trên các bản phân phối Linux khác nhau, từ Ubuntu đến CentOS. - Các ví dụ sử dụng thực tế: Thành thạo các cách dùng
iotoptrong thực tế, như chỉ hiển thị tiến trình đang hoạt động I/O, theo dõi tiến trình cụ thể và ghi log. - Kịch bản chẩn đoán: Học quy trình chẩn đoán chuyên nghiệp để xác định nguyên nhân gây chậm hệ thống, từ việc dùng
topđến khoanh vùng bằngiotop. - Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các vấn đề thực tế như giới hạn kernel, cách xem tổng lượng dữ liệu và xử lý khi
swapintăng cao.
Lệnh iotop là gì?
iotop là một tiện ích dòng lệnh mã nguồn mở miễn phí trong Linux, được thiết kế chuyên biệt để giám sát hoạt động I/O (Input/Output) của ổ đĩa cứng theo thời gian thực. Tuy nhiên, thay vì tập trung vào việc sử dụng CPU hay bộ nhớ RAM, iotop tập trung hiển thị danh sách các tiến trình (process) hoặc luồng (thread) đang tiêu thụ băng thông ổ cứng nhiều nhất. Công cụ này đặc biệt hữu ích khi hệ thống hoạt động chậm chạp và người quản trị cần xác định xem chương trình nào đang ghi hoặc đọc dữ liệu quá mức.

Công cụ iotop trình bày thông tin thông qua một giao diện dạng bảng, giúp người dùng dễ dàng nắm bắt tình hình hệ thống với các tính năng nổi bật sau:
- Hiển thị tốc độ đọc và ghi dữ liệu chi tiết theo từng tiến trình hoặc luồng.
- Cung cấp thông tin về phần trăm thời gian mà một tiến trình phải chờ đợi hoạt động I/O hoặc swap.
- Hỗ trợ nhiều tùy chọn dòng lệnh linh hoạt để lọc, sắp xếp và tùy biến cách hiển thị dữ liệu theo nhu cầu giám sát cụ thể.
Cú pháp và tùy chọn phổ biến của lệnh iotop
Cú pháp cơ bản
Để chạy iotop, người dùng bắt buộc phải có quyền quản trị (root) hoặc sử dụng sudo, vì lệnh này cần truy cập vào thông tin hạt nhân của hệ thống.
sudo iotop [TÙY_CHỌN]Sau khi chạy, màn hình sẽ hiển thị danh sách các tiến trình được sắp xếp theo mức độ sử dụng I/O.

Dưới đây là phân tích các cột quan trọng:
- TID/PID: ID của Thread hoặc Process đang gây ra I/O.
- PRIO: Độ ưu tiên của tiến trình đối với I/O (Class/Level).
- USER: Người dùng sở hữu tiến trình đó.
- DISK READ / DISK WRITE: Tốc độ đọc/ghi dữ liệu hiện tại của tiến trình xuống ổ cứng (ví dụ: B/s, K/s, M/s). Đây là hai cột trực quan nhất để xác định tiến trình nào đang hoạt động.
- SWAPIN: Phần trăm thời gian mà tiến trình dùng để “swap in” (đọc dữ liệu từ swap trên ổ cứng vào RAM). Nếu con số này cao, đó là dấu hiệu server của bạn đang thiếu RAM trầm trọng.
- IO%: Phần trăm thời gian mà tiến trình đã phải chờ đợi để thực hiện thao tác I/O. ((Chỉ số này cao chứng tỏ tiến trình đang chiếm dụng ổ cứng lớn).
Tùy chọn phổ biến của lệnh iotop
| Tùy chọn | Chức năng |
|---|---|
-o, --only | Chỉ hiển thị các tiến trình đang thực sự hoạt động I/O (thay vì hiện tất cả). |
-b, --batch | Chế độ không tương tác, hữu ích để ghi log hoặc chạy script. |
-n NUM, --iter=NUM | Số lần cập nhật dữ liệu trước khi thoát chương trình. |
-d SEC, --delay=SEC | Thiết lập khoảng thời gian (giây) giữa các lần làm mới dữ liệu. |
-p PID, --pid=PID | Chỉ giám sát (filter) theo mã ID của một tiến trình cụ thể. |
-u USER, --user=USER | Chỉ hiển thị các tiến trình được thực hiện bởi người dùng cụ thể. |
-P, --processes | Chỉ hiển thị các tiến trình (processes), thay vì hiển thị tất cả các luồng (threads). |
-a, --accumulated | Hiển thị tổng lượng I/O tích lũy từ khi chạy lệnh thay vì tốc độ tức thời (băng thông). |
-k, --kilobytes | Hiển thị đơn vị đo là Kilobytes (KB) thay vì Bytes. |
-t, --time | Thêm nhãn thời gian (timestamp) vào mỗi dòng khi in ra màn hình (hữu ích cho chế độ batch). |
Các phím tắt tương tác nhanh
Trong khi giao diện iotop đang chạy, người dùng có thể sử dụng bàn phím để điều khiển:
- Phím o: Bật/tắt chế độ chỉ hiển thị các tiến trình đang có hoạt động I/O (tương tự cờ
-o). - Phím p: Chuyển đổi giữa chế độ xem theo Process (Tiến trình) hoặc Thread (Luồng).
- Phím a: Bật/tắt chế độ “accumulated”, hiển thị tổng dung lượng đã đọc/ghi từ đầu thay vì tốc độ hiện tại, rất hữu ích để tìm các process hoạt động theo từng đợt ngắn.
- Phím r: Đảo ngược thứ tự sắp xếp (từ cao đến thấp và ngược lại).
- Phím q: Thoát khỏi chương trình.
- Phím Mũi tên trái/phải: Thay đổi cột dùng để sắp xếp dữ liệu (ví dụ: sắp xếp theo DISK WRITE hoặc DISK READ).
Cách cài đặt iotop trên Linux
Yêu cầu trước khi cài đặt
Để có thể vận hành một cách chính xác, iotop đòi hỏi môi trường hệ thống phải đáp ứng một số yêu cầu kỹ thuật cụ thể sau:
- Phiên bản Linux Kernel: Yêu cầu từ phiên bản 2.6.20 trở lên, vì công cụ cần các chức năng liên quan đến taskstats có trong các phiên bản kernel này.
- Phiên bản Python: Yêu cầu từ phiên bản 2.7 trở lên.
- Quyền thực thi: Công cụ cần được chạy với quyền root (thông qua lệnh sudo) để có thể truy cập và thu thập đầy đủ dữ liệu I/O từ tất cả các tiến trình trên hệ thống.
Kiểm tra phiên bản hệ thống hiện tại
Trước khi tiến hành cài đặt, việc kiểm tra và đảm bảo hệ thống đáp ứng các yêu cầu tối thiểu là một bước quan trọng giúp tránh các lỗi không tương thích. Người dùng có thể dễ dàng xác minh phiên bản Kernel và Python đang được sử dụng thông qua các câu lệnh đơn giản sau:
- Kiểm tra phiên bản Kernel:
$uname -r
- Kiểm tra phiên bản Python:
$python3 -V hoặc $python3 --version
Nếu kết quả trả về cho thấy phiên bản Kernel lớn hơn hoặc bằng 2.6.20 và phiên bản Python lớn hơn hoặc bằng 2.7, hệ thống đã sẵn sàng để cài đặt iotop.
Cài đặt iotop
Cách 1 – Cài đặt qua trình quản lý gói
Để đảm bảo tính ổn định, người dùng nên cập nhật kho phần mềm của hệ thống trước khi cài đặt. Sau đó, tùy thuộc vào bản phân phối Linux đang vận hành, hãy sử dụng lệnh tương ứng:
- Trên Debian/Ubuntu/Linux Mint:
$sudo apt update
$sudo apt install iotop- Trên CentOS/RHEL 7:
$sudo yum update -y
$sudo yum install iotop- Trên RHEL 8+, Fedora và các phiên bản tương tự:
$sudo dnf update -y
$sudo dnf install iotop- Trên Arch Linux/Manjaro:
$sudo pacman -Syu
$sudo pacman -S iotop- Trên OpenSUSE/SUSE Linux Enterprise:
$sudo zypper refresh
$sudo zypper install iotopCách 2 – Cài đặt iotop từ mã nguồn
Trong trường hợp iotop không có sẵn trong kho phần mềm hoặc người dùng muốn cài đặt một phiên bản cụ thể (ví dụ: phiên bản 0.6), việc cài đặt từ mã nguồn là một giải pháp thay thế hiệu quả. Quy trình bao gồm các bước sau:
Tải gói mã nguồn: Bạn sử dụng lệnh wget để tải về tệp lưu trữ.
$wget http://guichaz.free.fr/iotop/files/iotop-0.6.tar.bz2Giải nén tệp:
$tar -xjvf iotop-0.6.tar.bz2Di chuyển vào thư mục vừa giải nén:
$cd iotop-0.6/Thực thi cài đặt: Chạy tệp setup.py với quyền root để hoàn tất quá trình.
$sudo ./setup.py install- Trên Debian/Ubuntu:
sudo apt-get update && sudo apt-get install iotop- Trên CentOS/RHEL/Fedora:
sudo yum install iotop
# Hoặc
sudo dnf install iotopVí dụ sử dụng lệnh iotop thực tế
Mặc định, iotop sẽ liệt kê tất cả các tiến trình, điều này có thể gây nhiễu và khó quan sát. Bạn hãy áp dụng các ví dụ sau để tập trung vào đúng đối tượng cần giám sát.
Chỉ hiển thị các tiến trình đang có hoạt động I/O
Bạn chạy lệnh sau để lọc bỏ các dòng trống và chỉ liệt kê những chương trình đang thực sự đọc hoặc ghi vào ổ cứng tại thời điểm đó.
sudo iotop -o
Theo dõi một tiến trình cụ thể
Khi bạn nghi ngờ một ứng dụng cụ thể đang làm chậm hệ thống và đã biết PID của tiến trình, bạn hãy sử dụng tùy chọn -p để theo dõi riêng tiến trình đó.
sudo iotop -p 1234
Ghi lại lịch sử hoạt động I/O ra file
Nếu bạn muốn lưu lại trạng thái hệ thống để phân tích sau hoặc gửi báo cáo, hãy sử dụng chế độ không tương tác (-b) kết hợp với số lần lặp (-n). Ví dụ dưới đây sẽ ghi lại 5 lần cập nhật trạng thái vào file văn bản.
sudo iotop -b -n 5 > /tmp/io_log.txt # Ghi lại 5 lần cập nhật rồi thoátKịch bản chẩn đoán thực tế
Đây là một quy trình chẩn đoán hoàn chỉnh và hiệu quả giúp bạn giải quyết tình trạng server chậm do I/O:
- Phát hiện vấn đề với
top: Sau khi chạytopvà thấy chỉ số%wacao bất thường, bạn có thể xác nhận vấn đề đến từ I/O. - Khoanh vùng thủ phạm với
iotop: Bạn mở một cửa sổ terminal khác, chạy lệnhsudo iotop -ovà bạn sẽ thấy tiến trình đang đứng đầu danh sách vềDISK WRITEhoặc cóIO%cao nhất. - Phân tích và hành động:
- Nếu là
mysqldhoặcpostgres: Vấn đề có thể đến từ các câu lệnh query không được tối ưu, buộc cơ sở dữ liệu phải quét (scan) quá nhiều dữ liệu trên đĩa. Khi đó, bạn hãy kiểm tra slow query log, tối ưu lại chỉ mục (index). - Nếu là
rsync,tar,cp: Một tác vụ backup, sao chép file lớn đang chạy, bạn cần kiểm tra cron job, có thể điều chỉnh lại lịch chạy vào giờ thấp điểm hoặc dùngioniceđể giảm độ ưu tiên I/O của tiến trình. - Nếu là
jbd2/sda1-8hoặckworker: Là các tiến trình của kernel Linux liên quan đến hệ thống file (journaling), cho thấy có một lượng lớn các thao tác ghi file nhỏ đang diễn ra, thường do một ứng dụng nào đó ghi log liên tục. Khi đó, bạn hãy dùng các công cụ khác nhưlsofđể xem ứng dụng nào đang mở nhiều file và ghi liên tục.
- Nếu là

Câu hỏi thường gặp
iotop có thể chạy trên mọi bản phân phối Linux không, hay bị giới hạn kernel?
iotop chỉ chạy ổn định trên các hệ thống có kernel Linux từ phiên bản 2.6.20 trở lên, vì các bản kernel cũ không có module taskstats cần thiết. Hầu hết các bản phân phối hiện đại đều đáp ứng tiêu chí này.
Có thể theo dõi tổng lượng dữ liệu đã đọc/ghi từ đầu phiên không?
Có thể. Khi đang chạy iotop, bạn bấm phím a để chuyển sang chế độ “accumulated”, ngay lập tức công cụ sẽ hiển thị tổng dung lượng đã đọc/ghi của từng process từ đầu phiên giám sát.
Làm sao xuất dữ liệu iotop ra file log để phân tích về sau?
Bạn chỉ cần dùng chế độ batch (-b) kèm tham số số lần cập nhật (-n), ví dụ:sudo iotop -b -n 10 > /tmp/io_log.txtDữ liệu sẽ được ghi ra file nhật ký để xem lại hoặc xử lý bằng script.
iotop có hỗ trợ lọc hoặc chỉ hiển thị các tiến trình thực sự gây I/O không?
iotop có hỗ trợ bằng tùy chọn -o (only). Lệnh sudo iotop -o chỉ liệt kê những process/luồng đang thực sự đọc hoặc ghi dữ liệu vào ổ cứng, giúp bạn tập trung xử lý các thủ phạm gây nghẽn.
Nếu lượng swapin trong iotop tăng cao thì xử lý thế nào?
Swapin cao cho thấy RAM hệ thống đang thiếu, tiến trình phải chuyển dữ liệu liên tục từ swap vào RAM, làm giảm hiệu năng tổng thể. Giải pháp là nâng cấp RAM hoặc tối ưu lại các tiến trình/ngừng ứng dụng chiếm dụng bộ nhớ nhiều nhất để giảm nhu cầu dùng swap.
iotop là tiện ích giám sát I/O đĩa cứng mạnh mẽ, giúp kiểm soát, phân tích và xử lý sự cố thực tế trên server Linux. Nhờ tích hợp nhiều tính năng hữu ích như lọc theo tiến trình I/O, ghi log phân tích, hiển thị tổng lượng đọc/ghi và tùy chỉnh giao diện, người dùng dễ dàng tối ưu trải nghiệm và hiệu suất hệ thống. Việc ứng dụng iotop một cách bài bản sẽ giúp hệ thống giảm nguy bị cơ nghẽn cổ chai, nâng cao độ ổn định và chủ động trong mọi quyết định quản lý hạ tầng công nghệ thông tin.




