[LinuxTools] Hướng dẫn sử dụng chương trình “iotop” để kiểm tra hoạt động IO hệ thống

Hướng dẫn sử dụng chương trình “iotop” để kiểm tra hoạt động IO hệ thống

Nếu bạn cần tìm ra thông tin những tiến trình nào trên hệ thống đang hoạt động I/O Disk nhiều hoặc phải swapping in và out bộ nhớ memory thì bạn không thể bỏ qua tool “iotop” được.

Iotop là gì ?
Iotop là một chương trình được viết bằng ngôn ngữ Python dùng để phân tích và giám sát các tiến trình hoạt động IO Disk cũng như lượng sử dụng dung lượng Swap. Iotop thể hiện thông tin thống kê về việc hoạt động sử dụng tương tác ổ cứng và việc sử dụng tương tác phân vùng Swap gần như real-time ngay lập tức.
– Bạn có thể sử dụng “iotop” để xác định xem tiến trình nào trên hệ thống đang tương tác hoạt động với ổ cứng của bạn quá nhiều với việc đọc/ghi ổ cứng.
– Bạn cũng có thể sử dụng “iotop” để xác định xem tiến trình nào đang swap dữ liệu vào phân vùng swap.

1. Cài đặt Iotop

– Chúng ta có 2 cách cài đặt, đó là cài đặt thông qua repository của hệ thống hoặc download source chương trình “iotop” về sử dụng trực tiếp.
– Các yêu cầu mà hệ thống cần đáp ứng để cài đặt Iotop : kernel v.2.6.20 trở lên hỗ trợ 1 số module yêu cầu, python 2.6 trở lên.
– Nếu cài đặt trên các Hệ Điều Hành mới từ 6.x trở về đây, thì có lẽ không phải quá băn khoăn. Nhưng nếu lỡ hệ thống của bạn cũ hơn so với dự tính thì bạn cần đáp ứng các yêu cầu trên.

1.0 Kiểm tra thông tin hệ thống tiên quyết

– Kiểm tra version kernel.

# uname -r
2.6.32-504.el6.x86_64

– Kiểm tra version Python.

# python -V
Python 2.6.6


1.1 Cài đặt thông qua Repository

+ Ubuntu/Debian

# sudo apt-get install iotop

+ CentOS/RedHat

# yum install iotop


1.2 Cài đặt thông qua source program

# wget http://guichaz.free.fr/iotop/files/iotop-0.6.tar.gz
# tar xvf iotop-0.6.tar.gz
# cd iotop-0.6/
# ./setup.py install


2. Hướng dẫn sử dụng chương trình lệnh “iotop”

2.1 Cơ bản để xem thông tin hoạt động sử dụng IO/Swap
– Chạy lệnh căn bản sẽ đưa vào chế độ màn hình “interactive mode” giúp bạn coi real-time ngay trên màn hình.

# iotop
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
5 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [stopper/0]

– Một số phím dùng để tương tác với màn hình hiển thị real-time “interactive mode” khi “iotop” chạy.
+ Nhấn nút “<” và “>” để di chuyển việc sắp xếp các cột.
+ Nhấn nút “r” để đảo ngược thứ tự sắp xếp.
+ Nhấn nút “o” để hiển thị các tiến trình/threads thực sự hoạt động IO.
+ Nhấn nút “a” để chuyển đổi dạng thống kê tích luỹ dữ liệu dung lượng ghi/đọc thay vì hiển thị dung lượng ghi/đọc từng thời điểm.
+ Nhấn nút “i” thay đổi chế độ ưu tiên của 1 tiến trình/threads.
+ Nhấn nút “q” để thoát.

– Thông tin 2 cột thống kê cần chú ý chủ yếu :
+ SWAPIN : thống kê % hoạt động Swap của tiến trình/threads
+ IO : thông kê tổng % IO của tiến trình/threads (bao gồm IO Disk & Swap)

2.2 Chạy chế độ “non-interactive mode”
– Chế độ này không yêu cầu sự tương tác của con người như chế độ mặc định, hỗ trợ tốt cho nhu cầu ghi log của chúng ta vào 1 file log.

# iotop -b

2.3 Hiển thị các tiến trình/threads thực sự tương tác hoạt động IO/Swap
– Chế độ này giúp chỉ liệt kê cụ thể các tiến trình thực sự tương tác hoạt động IO hoặc hoạt động Swap trên hệ thống, thay vì liệt kê toàn bộ bao gồm các tiến trình/threads đang chạy trên hệ thống.

# iotop -o

2.4 Giám sát tiến trình tương tác IO/Swap chạy quyền user cụ thể
– Mặc định là tất cả tiến trình của các user trên hệ thống đều được monitor, nhưng giờ bạn cảm thấy có những user gây ảnh hưởng đến hệ thống cụ thể hơn thì bạn hoàn toàn monitor riêng các tiến trình/threads đó trên IO.
– Bạn chỉ cần thêm option : iotop -u

# iotop -u nginx apache mysql

2.5 Giám sát tiến trình tương tác IO/Swap với thông tin PID cụ thể
– Bạn hoàn toàn có thể monitor các PID mà bạn thấy đang tương tác IO/Swap.
– Bạn chỉ cần thêm option : iotop -p

# iotop -p 1234 2345 3456

2.6 Sử dụng chế độ tích luỹ thông tin dung lượng I/O hoặc Swap (accumulated I/O)
– Nếu bạn sử dụng chế độ “accumulated I/O” thì dữ liệu dung lượng đọc/ghi sẽ được tích luỹ cộng dồn thông tin vào các tiến trình hoặc threads cụ thể qua từng thời điểm thời gian ghi nhận thay vì hiển thị thông tin dung lượng đọc/ghi vào từng thời điểm ở chế độ mặc định.

# iotop -a

2.7 Thêm thông tin thời gian (timestamp) lúc liệt kê tiến trình/threads
– Sẽ hiển thị thông tin về thời gian lúc ghi nhận tiến trình/threads đang thực hiện cho người quản trị xem.

# iotop -t
09:54:46 2990 be/4 apache 0.00 B/s 0.00 B/s 0.00 % 0.00 % httpd -k start -DSSL
09:54:46 2992 be/4 apache 0.00 B/s 0.00 B/s 0.00 % 0.00 % httpd -k start -DSSL
09:54:46 2994 be/4 apache 0.00 B/s 0.00 B/s 0.00 % 0.00 % httpd -k start -DSSL
09:54:46 2996 be/4 apache 0.00 B/s 0.00 B/s 0.00 % 0.00 % httpd -k start -DSSL

2.8 Hiển thị thống kê sau n lần rồi dừng
– Hoạt động ở chế độ “non-interactive mode” sau khi in ra các thông tin sau n lần sẽ dừng lại.

# iotop -n 10

2.9 Hiển thị dung lượng ở đơn vị Kilobyte (KB) thay vì mặc định B/s hiện tại

# iotop -k
13:11:49 349 be/3 root 0.00 K/s 0.00 K/s 0.00 % 11.37 % [jbd2/dm-0-8]
13:11:49 28900 be/4 root 0.00 K/s 3.95 K/s 0.00 % 0.00 % redis-server *:6379
13:11:54 349 be/3 root 0.00 K/s 0.00 K/s 0.00 % 5.64 % [jbd2/dm-0-8]
13:11:55 349 be/3 root 0.00 K/s 0.00 K/s 0.00 % 8.70 % [jbd2/dm-0-8]
13:11:55 28900 be/4 root 0.00 K/s 3.95 K/s 0.00 % 0.00 % redis-server *:6379

2.10 Option -q , -qq và -qqq
– “-q” : chỉ cho in ra thông tin tiêu đề cột thống kê trong lần đầu tiên, các lần sau không (TIME, TID,…)
– “-qq” : không cho iotop in ra thông tin tiêu đề cột thống kê
– “-qqq” : không in tiêu đề cột thống kê, không in thống kê I/O .


3. Cấu hình cho hoạt động ghi log

– Bạn hoàn toàn có thể sử dụng “iotop” với các option phù hợp làm log ghi nhận lại hoạt động IO của hệ thống trong 1 ngày, cũng như kết hợp rotate log nhằm giúp lưu trữ kiểm soát log hiệu quả hơn.
– Mình sẽ ví dụ ghi log như sau, với thiết lập cronjob chạy iotop trong vòng 60s ghi lại các sự kiện tiến trình hoạt động IO/Swap :

# crontab -e
* * * * * root /usr/sbin/iotop -botqqqk -n 60 >> /var/log/iotop.log

– Cấu hình thêm Log rotate cho log file iotop.log. Điều này sẽ giúp bạn kiểm soát dung lượng thông tin và số lượng file log cần thiết lưu trữ lại.

# vi /etc/logrotate.d/iotop
/var/log/iotop.log {
    rotate 5
    weekly
    compress
    missingok
    notifempty
}

Như vậy là đã hoàn thành phần hướng dẫn sử dụng chương trình “iotop” để theo dõi các hoạt động IO/Swap của hệ thống.

Previous article[Linux] Hướng dẫn tạo SWAP File trên CentOS/RedHat
Next article[CSF] Tìm hiểu vấn đề “LFD: Excessive resource usage” trên CSF Firewall
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !