Đêm Máy Chủ Của Tôi Gần Như Tê Liệt
Hôm đó là 11 giờ đêm, máy chủ production Ubuntu 22.04 với 4GB RAM của tôi bắt đầu phản hồi chậm như đang chạy trên Raspberry Pi Zero. Người dùng liên tục than phiền, thời gian phản hồi tăng vọt, và tôi hoàn toàn không biết thứ gì đang ngốn tài nguyên. Tôi SSH vào và gõ top — nhưng chỉ nhận được một mớ con số không giúp ích gì trong lúc hoảng loạn đó.
Đêm hôm đó, tôi tìm ra ba công cụ mà giờ tôi xem là thiết yếu trên mọi máy chủ Linux: htop, iotop và nethogs. Mỗi công cụ tập trung vào một tài nguyên cụ thể — CPU/bộ nhớ, disk I/O và mạng — và khi dùng cùng nhau, chúng trả lời ba câu hỏi quan trọng nhất khi máy chủ chậm lại: cái gì đang ngốn CPU, cái gì đang bóp nghẹt ổ đĩa, và cái gì đang ăn hết băng thông.
Hiểu Vai Trò Của Từng Công Cụ
htop — Phiên Bản Tốt Hơn của top
Nếu bạn đã từng dùng top, bạn sẽ ngay lập tức thích htop. Đây là công cụ xem tiến trình tương tác với giao diện có màu sắc, hỗ trợ chuột và các phím tắt thực sự dễ dùng. Bạn có thể sắp xếp, kết thúc tiến trình và lọc theo người dùng — tất cả mà không cần ghi nhớ các tổ hợp phím khó hiểu.
Các chỉ số quan trọng được hiển thị:
- Mức sử dụng từng nhân CPU (không chỉ là giá trị trung bình)
- Mức dùng RAM và swap dưới dạng thanh trực quan
- Load average trong 1, 5 và 15 phút
- Xem dạng cây tiến trình (tiến trình nào sinh ra tiến trình nào)
iotop — Tìm Kẻ Ngốn Ổ Đĩa
iotop làm cho ổ đĩa những gì htop làm cho CPU. Nó hiển thị hoạt động đọc/ghi theo từng tiến trình theo thời gian thực. Đây là công cụ bạn cần đến khi disk I/O đã đầy tải nhưng htop lại cho thấy CPU gần như nhàn rỗi — một tình huống phổ biến nhưng dễ gây nhầm lẫn.
nethogs — Theo Dõi Mạng Theo Từng Tiến Trình
Các công cụ thông thường như iftop hay nload chỉ hiển thị tổng băng thông theo interface. nethogs đi sâu hơn một bước: nó gán băng thông đó cho từng tiến trình cụ thể. Khi có thứ gì đó đang đẩy upload lên 50 Mbps, nethogs cho bạn biết chính xác PID nào đang gây ra điều đó.
Cài Đặt Cả Ba Công Cụ
Trên Debian/Ubuntu:
sudo apt update
sudo apt install htop iotop nethogs -y
Trên RHEL/AlmaLinux/Fedora:
sudo dnf install htop iotop nethogs -y
Thực Hành: Sử Dụng htop Hiệu Quả
Chỉ cần chạy:
htop
Điều đầu tiên bạn sẽ thấy là các thanh CPU ở trên cùng — mỗi thanh cho một nhân. Trên máy chủ 4 nhân của tôi, khi một thanh đạt 100% trong khi các thanh khác nhàn rỗi, tôi biết ngay có một tiến trình đơn luồng nào đó đang là thủ phạm.
Các phím tắt hữu ích trong htop:
- F6 — Sắp xếp theo cột bất kỳ (CPU%, MEM%, TIME, v.v.)
- F4 — Lọc tiến trình theo tên
- F5 — Bật/tắt dạng cây (xem quan hệ cha-con)
- F9 — Gửi tín hiệu (kill, SIGTERM, v.v.) tới tiến trình được chọn
- Space — Đánh dấu tiến trình (để thao tác nhiều tiến trình cùng lúc)
Nên làm trên mọi máy chủ mới: nhấn F2 → Display Options → tích vào “Show custom thread names”. Các worker PHP-FPM và thread Python sẽ dễ nhận ra hơn nhiều.
Chạy htop Cho Một Người Dùng Cụ Thể
htop -u www-data
Rất hữu ích để lọc bớt nhiễu — bạn chỉ thấy các tiến trình của www-data, không phải hàng chục daemon hệ thống đang chạy ngầm.
Thực Hành: Chẩn Đoán Disk I/O với iotop
iotop cần quyền root. Chạy bằng lệnh:
sudo iotop
Mặc định, nó hiển thị tất cả tiến trình, kể cả những tiến trình không có I/O. Điều này gây rối rất nhanh. Thay vào đó hãy dùng các cờ sau:
# Chỉ hiển thị tiến trình đang thực sự có I/O
sudo iotop -o
# Snapshot không tương tác (hữu ích cho scripts)
sudo iotop -o -b -n 3
Cờ -b chạy ở chế độ batch (không có giao diện tương tác), và -n 3 chụp 3 lần rồi thoát. Rất hữu ích để ghi lại các đột biến I/O trong cron job hoặc file log.
Ý Nghĩa Các Cột
- DISK READ — Lượng dữ liệu tiến trình đọc từ ổ đĩa mỗi giây
- DISK WRITE — Lượng dữ liệu đang ghi
- SWAPIN — Phần trăm thời gian chờ dữ liệu được swap vào từ swap space (nếu cao, bạn đang gặp rắc rối)
- IO> — Phần trăm thời gian tiến trình dành cho I/O
Trên máy chủ production của tôi, lúc đó tôi mới hiểu ra: một tác vụ backup MySQL hàng đêm đang chạy mysqldump và đập vào ổ đĩa với tốc độ 80MB/s — mọi tiến trình khác đều phải xếp hàng chờ. Giải pháp khá đơn giản: thêm --single-transaction để tránh khóa bảng, và dùng pipe qua gzip để nén ngay khi xuất. Lượng dữ liệu ghi giảm khoảng 70%, và máy chủ không còn ì ạch nữa.
Thực Hành: Theo Dõi Lưu Lượng Mạng Theo Tiến Trình với nethogs
sudo nethogs
Hoặc chỉ định interface nếu bạn có nhiều card mạng:
sudo nethogs eth0
sudo nethogs ens3 # phổ biến trên cloud VM
nethogs cập nhật mỗi giây theo mặc định. Bạn sẽ thấy output tương tự như sau:
NetHogs version 0.8.7
PID USER PROGRAM DEV SENT RECEIVED
1847 www-data /usr/sbin/apache2 ens3 4.382 12.543 KB/sec
2341 ubuntu scp ens3 0.000 45.210 KB/sec
. unknown unknown TCP ens3 0.083 0.024 KB/sec
TOTAL 4.465 57.777 KB/sec
Tiến trình scp đó đang kéo 45 KB/s — có thể là một backup hoặc quá trình chuyển file đang diễn ra. Biết được đó là PID 2341, bạn có thể kiểm tra ai đang chạy nó bằng lệnh:
ps -p 2341 -o pid,user,cmd
Phím Tắt Trong nethogs
- m — Chuyển đổi giữa các đơn vị hiển thị KB/s, KB và B
- r — Sắp xếp theo lưu lượng nhận
- s — Sắp xếp theo lưu lượng gửi
- q — Thoát
Kết Hợp Cả Ba: Quy Trình Xử Lý Sự Cố Thực Tế
Đây là cách tôi thực sự dùng các công cụ này cùng nhau khi có sự cố:
- Bắt đầu với htop — CPU hay bộ nhớ là nút cổ chai? Nếu load average gấp 4 lần số nhân CPU, CPU đang bão hòa. Nếu swap đang được dùng, bộ nhớ là vấn đề.
- Nếu CPU ổn, chuyển sang iotop — Chạy
sudo iotop -ovà xem có tiến trình nào có IO% hoặc SWAPIN% cao không. Tình trạng bão hòa disk I/O thường ngụy trang thành sự chậm chạp chung. - Nếu cả hai đều ổn, kiểm tra nethogs — Có thể có thứ gì đó đang tiêu thụ băng thông vào hoặc ra, gây ra timeout ứng dụng hoặc trễ API.
Quy trình ba bước này đã giúp tôi chẩn đoán các sự cố từ một script log rotation chạy mất kiểm soát (disk I/O) đến một máy chủ bị xâm phạm đẩy dữ liệu ra ngoài với tốc độ 100 Mbps (mạng — phát hiện bởi nethogs trong vòng chưa đến 30 giây).
Thẻ Tham Khảo Nhanh
# htop — theo dõi CPU/bộ nhớ tương tác
htop
htop -u username # lọc theo người dùng
htop -p 1234,5678 # theo dõi các PID cụ thể
# iotop — disk I/O theo tiến trình
sudo iotop -o # chỉ tiến trình đang hoạt động
sudo iotop -o -b -n 5 # 5 snapshot batch, tốt cho logging
# nethogs — lưu lượng mạng theo tiến trình
sudo nethogs # tự động nhận diện interface
sudo nethogs eth0 ens3 # theo dõi nhiều interface
Cài Đặt Sẵn Cho Toàn Hệ Thống
Nếu bạn quản lý các máy chủ mà nhiều thành viên trong nhóm SSH vào, nên thêm một alias nhỏ để mọi người có thể chạy nethogs mà không cần nhớ yêu cầu sudo:
# Thêm vào /etc/bash.bashrc hoặc ~/.bashrc của từng người dùng
alias nethogs='sudo nethogs'
alias iotop='sudo iotop -o'
Ba Công Cụ, Một Thói Quen
Với htop, iotop và nethogs, bạn có khả năng theo dõi từng tiến trình trên mọi tài nguyên quan trọng của máy chủ. CPU, bộ nhớ, ổ đĩa và mạng — tất cả đều được bao quát. Không còn phải đoán mò.
Lần sau khi thứ gì đó cảm thấy chậm, hãy kìm lại sự thôi thúc muốn restart service hoặc reboot ngay. Mở các công cụ này trước. Chín trong mười lần, câu trả lời nằm ngay trong output — và bạn sẽ tìm ra trong vài phút thay vì vài giờ.

