Lệnh pidstat là công cụ chuyên sâu trong gói sysstat giúp quản trị viên giám sát tiến trình Linux theo thời gian thực và ghi nhận chi tiết mức tiêu thụ CPU, RAM, Disk I/O cũng như context switch của từng PID hoặc Thread. Khi hệ thống gặp hiện tượng giật lag hoặc quá tải mà các lệnh thông thường không chỉ rõ nguyên nhân, sử dụng pidstat trên máy chủ InterData sẽ giúp bạn khoanh vùng chính xác tiến trình gây nghẽn hiệu năng chỉ trong vài giây.
NỘI DUNG BÀI VIẾT
- 1. Lệnh pidstat là gì? Cơ chế giám sát tiến trình Linux như thế nào?
- 2. So sánh lệnh pidstat với top, htop, vmstat và iostat
- 3. Cách cài đặt sysstat pidstat trên Ubuntu, Debian, CentOS và RHEL
- 4. Cú pháp và các tham số quan trọng của lệnh pidstat
- 5. Hướng dẫn sử dụng lệnh pidstat chẩn đoán lỗi CPU cao trên VPS
- 6. Theo dõi Disk I/O và Memory chi tiết theo từng tiến trình
- 7. Kết hợp pidstat với giám sát tự động và bảo mật hệ thống
- 8. Xử lý các lỗi thường gặp khi thực thi lệnh pidstat
- 9. Câu hỏi thường gặp về lệnh pidstat (FAQ)
1. Lệnh pidstat là gì? Cơ chế giám sát tiến trình Linux như thế nào?
Lệnh pidstat là một tiện ích dòng lệnh mạnh mẽ thuộc bộ công cụ sysstat package trên hệ điều hành Linux. Lệnh này được sử dụng để theo dõi các tác vụ (tasks/processes) và luồng (threads) đang được quản lý bởi Linux kernel, xuất dữ liệu định kỳ theo từng khoảng thời gian xác định.
Khác với các công cụ tổng quan trong danh mục các lệnh Linux cơ bản, pidstat không hiển thị tài nguyên gộp của toàn hệ điều hành mà bóc tách chi tiết từng Process ID (PID). Công cụ đọc trực tiếp dữ liệu từ hệ thống tập tin ảo /proc (như /proc/[PID]/stat, /proc/[PID]/io, /proc/[PID]/status) để tính toán delta (độ biến thiên) giữa hai lần lấy mẫu, từ đó mang lại kết quả chuẩn xác về:
- Mức sử dụng CPU: Phân chia rạch ròi giữa thời gian xử lý ở không gian người dùng (
%usr) và thời gian thực thi trong nhân Linux kernel (%system), cũng như độ trễ chờ CPU (%wait). - Mức sử dụng RAM: Theo dõi dung lượng bộ nhớ ảo (VSZ), bộ nhớ thực đang dùng (RSS) và tỉ lệ chiếm dụng phần trăm bộ nhớ (
%MEM). - Hoạt động Disk I/O: Tốc độ đọc (kB_rd/s), tốc độ ghi (kB_wr/s) và tỉ lệ tác vụ bị hoãn do chờ đĩa (
%wait/ I/O delay). - Chuyển ngữ cảnh (Context Switches): Số lần tự nguyện đổi ngữ cảnh (
cswch/s) hoặc bị ép buộc nhường CPU (nvcswch/s) của từng tác vụ.

2. So sánh lệnh pidstat với top, htop, vmstat và iostat
Trong hệ sinh thái quản trị Linux, mỗi công cụ được thiết kế phục vụ một góc nhìn kỹ thuật khác nhau. Trong khi các lệnh như top hoặc htop cung cấp giao diện tương tác toàn cảnh, pidstat lại vượt trội khi cần xuất log lịch sử theo thời gian và phân tích sâu theo luồng của từng ứng dụng.
| Tiêu chí so sánh | Lệnh pidstat | Lệnh top / htop | Lệnh vmstat / iostat |
|---|---|---|---|
| Phạm vi giám sát | Từng tiến trình (PID) và luồng (Thread) | Toàn bộ hệ thống + danh sách top PID | Toàn hệ thống hoặc theo từng phân vùng đĩa |
| Độ chi tiết Disk I/O | Bóc tách I/O theo từng tiến trình riêng biệt | Không có hoặc rất sơ sài (chỉ thấy I/O chung) | Chi tiết theo Block Device (sda, nvme0n1) |
| Khả năng xuất dữ liệu (Log) | Rất tốt, dễ parse ra file text hoặc CSV | Khó ghi log tự động do giao diện ncurses | Rất tốt theo dòng thời gian |
| Giám sát Context Switch | Hỗ trợ đo lường chi tiết cho từng PID | Không hỗ trợ | Chỉ hiển thị tổng context switch toàn hệ thống |
Khi bạn chỉ cần nhìn lướt để biết CPU đang đầy hay rỗng, top hoặc htop là lựa chọn nhanh. Tuy nhiên, khi cần tìm ra chính xác thread nào của MySQL đang gây I/O nghẽn hoặc ứng dụng Java nào đang chuyển ngữ cảnh quá mức, lệnh pidstat là công cụ chuyên trách không thể thay thế.
3. Cách cài đặt sysstat pidstat trên Ubuntu, Debian, CentOS và RHEL
Tiện ích pidstat không phải lúc nào cũng được cài mặc định trên các bản phân phối Linux tối giản. Để sử dụng, bạn cần cài đặt gói sysstat tương ứng với hệ điều hành đang vận hành trên máy chủ.
3.1. Cài đặt trên hệ điều hành Ubuntu và Debian
Các bước cài đặt và kích hoạt dịch vụ thu thập dữ liệu sysstat trên Ubuntu/Debian:
1/ Cập nhật danh sách gói phần mềm trên hệ thống:
sudo apt update
2/ Tiến hành cài đặt gói sysstat:
sudo apt install sysstat -y
3/ Kích hoạt tính năng thu thập dữ liệu ngầm bằng cách cấu hình file /etc/default/sysstat:
sudo sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat
4/ Khởi động lại và bật tự chạy dịch vụ:
sudo systemctl enable --now sysstat
sudo systemctl status sysstat

3.2. Cài đặt trên CentOS, RHEL, AlmaLinux và Rocky Linux
Đối với các bản phân phối sử dụng trình quản lý gói YUM hoặc DNF:
1/ Chạy lệnh cài đặt gói sysstat:
sudo dnf install sysstat -y
# Hoặc trên CentOS 7 cũ:
sudo yum install sysstat -y
2/ Khởi chạy và thiết lập khởi động cùng hệ thống:
sudo systemctl enable --now sysstat
sudo systemctl status sysstat
3/ Kiểm tra xem lệnh đã hoạt động thành công hay chưa:
pidstat -V
4. Cú pháp và các tham số quan trọng của lệnh pidstat
Cú pháp cơ bản của lệnh pidstat trên terminal như sau:
pidstat [tùy_chọn] [khoảng_thời_gian] [số_lần_lặp]
Ví dụ, khi bạn chạy pidstat 2 5, hệ thống sẽ đo lường tài nguyên mỗi 2 giây một lần và thực hiện lặp lại 5 lần, sau đó hiển thị bảng tổng kết giá trị trung bình (Average).
Các tham số thường dùng nhất trong thực tế bao gồm:
-u: Giám sát mức tiêu thụ CPU của các tiến trình (tham số mặc định khi không khai báo tùy chọn khác).-r: Đo lường mức chiếm dụng bộ nhớ RAM, phân trang (page faults) và tỉ lệ rò rỉ bộ nhớ.-d: Giám sát hoạt động đọc/ghi dữ liệu ổ cứng (Disk I/O) theo từng PID.-w: Thống kê số lần chuyển ngữ cảnh (Context Switching) của tiến trình.-p <PID>: Chỉ định một Process ID cụ thể cần theo dõi (hoặc dùng-p ALLcho tất cả).-t: Hiển thị chi tiết theo từng Thread bên trong tiến trình thay vì chỉ gom nhóm theo Task.-l: Hiển thị đầy đủ tên tiến trình cùng với các tham số dòng lệnh khởi chạy.-C <tên_chuỗi>: Lọc danh sách tiến trình chứa tên chỉ định (ví dụ:pidstat -C nginx).
Săn Ưu Đãi Tiết Kiệm
Canh Me tổng hợp khuyến mãi, mã giảm giá, Hot Deals VPS và Cloud Server mới nhất của InterData — xem trước để chọn cấu hình phù hợp với chi phí tốt nhất.
5. Hướng dẫn sử dụng lệnh pidstat chẩn đoán lỗi CPU cao trên VPS
Khi kiểm tra hệ thống theo bài viết hướng dẫn sử dụng VPS và phát hiện Load Average tăng đột biến, bạn cần dùng lệnh pidstat để tìm ra chính xác dịch vụ nào đang chiếm giữ CPU cores.
5.1. Giám sát CPU tổng quát của tất cả tiến trình
Để lấy mẫu CPU mỗi 2 giây trong 3 lần lặp:
pidstat -u 2 3
Dữ liệu đầu ra mẫu trên màn hình terminal:
14:10:02 UID PID %usr %system %guest %wait %CPU CPU Command
14:10:04 1000 2145 68.50 12.00 0.00 1.50 80.50 1 mysqld
14:10:04 33 3421 15.00 4.00 0.00 0.50 19.00 0 php-fpm
14:10:04 0 120 0.00 0.50 0.00 0.00 0.50 1 kworker/u4:1
Ý nghĩa các chỉ số cần lưu ý khi phân tích:
- %usr: Tỉ lệ CPU tiêu thụ ở User Level. Nếu chỉ số này cao vọt ở các tiến trình như
php-fpmhoặcmysqld, nguyên nhân thường do mã nguồn PHP chưa tối ưu hoặc truy vấn SQL thiếu chỉ mục Index. - %system: Tỉ lệ CPU tiêu thụ trong không gian Kernel System. Nếu mục này cao bất thường, tiến trình đang thực hiện quá nhiều System Calls (gọi ngắt I/O, network socket, cấp phát bộ nhớ liên tục).
- %wait: Thời gian tiến trình phải xếp hàng chờ CPU sẵn sàng phục vụ. Khi kết hợp với các bước kiểm tra tài nguyên VPS, nếu %wait cao chứng tỏ VPS đang thiếu CPU core nghiêm trọng hoặc bị tranh chấp tài nguyên (CPU Steal / Noisy Neighbor).
- CPU: Số thứ tự lõi CPU vật lý/ảo mà tiến trình đó đang được gán xử lý.

5.2. Đào sâu phân tích theo từng Thread của một PID
Các ứng dụng hiện đại như Java, NodeJS, MySQL hay Nginx thường chạy đa luồng. Để tìm đúng thread gây quá tải bên trong PID 2145:
pidstat -t -p 2145 1 5
Cột TID (Thread ID) sẽ xuất hiện. Bạn có thể sử dụng TID này để tiếp tục debug với gdb hoặc strace nhằm xem luồng đó đang xử lý đoạn code nào trong hệ thống.
6. Theo dõi Disk I/O và Memory chi tiết theo từng tiến trình
Nghẽn cổ chai ổ đĩa (I/O Bottleneck) và tràn bộ nhớ là hai nguyên nhân phổ biến nhất khiến website bị chậm hoặc máy chủ MySQL bị treo đột ngột.
6.1. Giám sát Disk I/O với tham số -d
Thực thi lệnh sau để kiểm tra tốc độ đọc/ghi dữ liệu ổ cứng của từng tiến trình mỗi 2 giây:
pidstat -d 2 3
Mẫu kết quả hiển thị:
14:15:10 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
14:15:12 1000 2145 5420.00 1200.50 0.00 8 mysqld
14:15:12 0 540 0.00 450.00 0.00 0 jbd2/sda1-8
- kB_rd/s: Lượng dữ liệu tiến trình yêu cầu đọc từ đĩa cứng mỗi giây (tính bằng Kilobytes).
- kB_wr/s: Lượng dữ liệu tiến trình ghi trực tiếp xuống đĩa mỗi giây.
- kB_ccwr/s: Dữ liệu đã huỷ ghi khi tiến trình ghi đè hoặc xoá bỏ trước khi đồng bộ xuống đĩa vật lý.
- iodelay: Độ trễ I/O (tính bằng đơn vị clock ticks) mà tiến trình phải chờ đợi. Chỉ số này càng lớn đồng nghĩa với việc ổ cứng không đáp ứng kịp tốc độ xử lý của phần mềm.

6.2. Kiểm tra bộ nhớ RAM và lỗi phân trang với tham số -r
Để phát hiện các tiến trình rò rỉ RAM hoặc tiêu tốn bộ nhớ đệm, dùng lệnh:
pidstat -r 2 3
Ý nghĩa cột kết quả:
- minflt/s: Số lượng Minor Faults mỗi giây (lỗi nạp trang bộ nhớ không cần truy xuất đĩa cứng).
- majflt/s: Số lượng Major Faults mỗi giây. Khi chỉ số này tăng cao, hệ thống buộc phải nạp trang từ phân vùng Swap hoặc ổ cứng, làm sụt giảm tốc độ xử lý nghiêm trọng.
- VSZ (Virtual Size): Toàn bộ dung lượng bộ nhớ ảo được cấp cho tiến trình (kB).
- RSS (Resident Set Size): Dung lượng RAM vật lý thực tế mà tiến trình đang chiếm dụng (kB).
- %MEM: Phần trăm dung lượng RAM vật lý tiến trình đang dùng trên tổng số RAM của máy chủ.

7. Kết hợp pidstat với giám sát tự động và bảo mật hệ thống
Việc chạy lệnh pidstat thủ công chỉ áp dụng khi bạn đang trực tiếp khắc phục sự cố. Trong môi trường vận hành lâu dài, bạn cần tự động hóa thu thập log và kết hợp với các giải pháp an ninh nhằm nhận diện sớm các cuộc tấn công DDoS hoặc đào tiền ảo ngầm.
Sau khi phân tích các tiến trình khả nghi chiếm giữ socket mạng hoặc CPU, bạn nên tiến hành cấu hình UFW trên Ubuntu để khóa toàn bộ các cổng mạng lạ không sử dụng. Đồng thời, áp dụng cài đặt Fail2ban trên Linux để tự động ban IP nếu phát hiện các cuộc tấn công brute-force liên tục kích hoạt tiến trình sshd.
Bên cạnh đó, việc thực hiện đúng chuẩn bảo mật SSH VPS (đổi cổng mặc định, tắt xác thực Password, chỉ dùng SSH Key) sẽ giảm thiểu tối đa nguy cơ máy chủ bị xâm nhập trái phép.
Bạn cũng có thể thiết lập kịch bản shell script tự động đọc kết quả từ pidstat và gửi cảnh báo khi có tiến trình chiếm trên 90% CPU thông qua giải pháp giám sát tài nguyên VPS qua Telegram. Ví dụ đoạn script mẫu:
#!/bin/bash
# Trích xuất các PID chiếm CPU > 80% trong 5 giây
ALERT_LOG=$(pidstat -u 5 1 | awk 'NR>3 && $8 > 80.0 {print "PID: "$3" - Cmd: "$9" - CPU: "$8"%" }')
if [ ! -z "$ALERT_LOG" ]; then
# Gửi thông báo đến Telegram Bot API của bạn
echo "Cảnh báo tiến trình CPU cao: $ALERT_LOG"
fi
8. Xử lý các lỗi thường gặp khi thực thi lệnh pidstat
Trong quá trình vận hành, quản trị viên thường gặp phải một số lỗi phổ biến khi chạy lệnh pidstat. Dưới đây là cách kiểm tra và khắc phục cụ thể:
8.1. Lỗi: pidstat: command not found
Triệu chứng: Khi gõ lệnh pidstat, terminal báo lỗi không tìm thấy câu lệnh.
Nguyên nhân: Gói công cụ sysstat chưa được cài đặt trên hệ điều hành Linux của bạn.
Cách khắc phục: Chạy lệnh cài đặt tương ứng với distro đang dùng:
# Đối với Ubuntu / Debian
sudo apt update && sudo apt install sysstat -y
# Đối với CentOS / RHEL / AlmaLinux
sudo dnf install sysstat -y
8.2. Lỗi: pidstat không hiển thị dữ liệu hoặc bảng kết quả trống rỗng
Triệu chứng: Chạy pidstat -d hoặc pidstat -u nhưng không xuất hiện bất kỳ tiến trình nào ngoài tiêu đề các cột.
Nguyên nhân: Mặc định pidstat chỉ hiển thị các tiến trình đang có phát sinh hoạt động (Active Tasks) trong khoảng thời gian lấy mẫu. Nếu hệ thống ở trạng thái Idle, các tiến trình không tiêu thụ tài nguyên sẽ bị ẩn.
Cách khắc phục: Sử dụng tham số -p ALL để buộc pidstat hiển thị tất cả tiến trình trên hệ thống:
pidstat -u -p ALL 1 1
8.3. Thiếu quyền xem thông tin Disk I/O của người dùng khác
Triệu chứng: Người dùng thông thường (Non-root user) chạy pidstat -d thấy các cột I/O trả về giá trị 0 hoặc thiếu thông tin của các tiến trình dịch vụ như Nginx, MySQL.
Nguyên nhân: Linux kernel bảo vệ quyền riêng tư và an ninh bằng cách chặn người dùng thường đọc file /proc/[PID]/io của các tiến trình thuộc sở hữu tài khoản khác.
Cách khắc phục: Thực thi lệnh với quyền quản trị tối cao:
sudo pidstat -d 1 3
Câu Hỏi Thường Gặp về lệnh pidstat
Làm thế nào để giám sát toàn bộ CPU, RAM và I/O cùng một lúc bằng pidstat?
Bạn có thể kết hợp các tham số -d -r -u -w trong cùng một câu lệnh. Ví dụ, thực thi pidstat -durw 2 3 sẽ yêu cầu công cụ xuất lần lượt bảng thống kê CPU, RAM, Disk I/O và số lượt context switch của từng tiến trình sau mỗi 2 giây.
Chỉ số %wait trong kết quả CPU của pidstat có ý nghĩa gì?
Chỉ số %wait thể hiện phần trăm thời gian mà tiến trình hoặc luồng đó phải nằm trong hàng đợi chờ CPU cấp phát thời gian xử lý. Khi chỉ số này vượt quá 5-10%, máy chủ của bạn đang bị nghẽn CPU hoặc chia sẻ tài nguyên không đủ đáp ứng tác vụ.
Làm sao để lọc theo dõi một tiến trình cụ thể theo tên ứng dụng?
Sử dụng tham số -C theo sau là từ khóa tên tiến trình. Ví dụ, để theo dõi mọi hoạt động CPU của web server Nginx mỗi giây một lần, bạn chạy lệnh pidstat -C nginx 1.
Lệnh pidstat lấy dữ liệu từ đâu trong hệ điều hành Linux?
Lệnh pidstat đọc trực tiếp từ hệ thống tập tin ảo /proc của Linux kernel, cụ thể là các file /proc/[PID]/stat, /proc/[PID]/io và /proc/[PID]/status, sau đó tính toán tỉ lệ chênh lệch giữa hai thời điểm đo lường để xuất ra số liệu.
Pidstat có ảnh hưởng nhiều đến hiệu năng của máy chủ khi chạy không?
Pidstat tiêu tốn rất ít tài nguyên do cơ chế đọc trực tiếp từ kernel interface trên RAM. Tuy nhiên, nếu bạn theo dõi hàng nghìn tiến trình đồng thời với chu kỳ quá ngắn (dưới 0.1 giây), mức tiêu thụ CPU có thể tăng nhẹ trong quá trình quét.
Kết luận về việc sử dụng lệnh pidstat trong quản trị Linux
Lệnh pidstat là công cụ phân tích tiến trình không thể thiếu đối với mọi Linux System Administrator khi cần chẩn đoán sâu các điểm nghẽn hiệu năng về CPU, Disk I/O và bộ nhớ RAM. Bằng cách nắm vững các tùy chọn -u, -d, -r, -t và kết hợp với các phương pháp tối ưu hóa VPS Linux, bạn hoàn toàn có thể chủ động kiểm soát tài nguyên máy chủ và duy trì hoạt động ổn định cho các dịch vụ cốt lõi.
Nội dung mang tính tham khảo. Lệnh, cú pháp, đường dẫn file và tùy chọn cấu hình có thể thay đổi theo phiên bản hệ điều hành, phiên bản phần mềm và môi trường cụ thể. Nên kiểm thử, sao lưu dữ liệu và đánh giá rủi ro trước khi áp dụng lên server production.
