Lệnh pidstat là công cụ chuyên dụng trên hệ thống Linux, được sử dụng để giám sát tài nguyên mà các tiến trình đang sử dụng. Bài viết này được mình đúc kết từ quá trình trực tiếp xử lý hàng nghìn ticket tối ưu hệ thống cho khách hàng tại Vietnix, nơi mà mỗi mili giây phản hồi của server đều ảnh hưởng trực tiếp đến doanh thu của doanh nghiệp. Trong bài viết dưới đây, mình sẽ cùng bạn tìm hiểu chi tiết về cú pháp và cách sử dụng lệnh pidstat qua từng ví dụ cụ thể.
Những điểm chính
- Quan điểm của mình: Để tối ưu hóa hiệu suất máy chủ Linux một cách triệt để, bạn không thể chỉ nhìn vào bức tranh tổng thể mà phải chú ý vào từng tiến trình riêng lẻ. Lệnh pidstat chính là công cụ hoàn hảo nhất giúp bạn thực hiện điều đó.
- Khái niệm: Hiểu rõ bản chất lệnh
pidstatvà nắm vững cấu trúc lệnh để bắt đầu giám sát hiệu năng tiến trình chuyên sâu trên Linux. - Các trường hợp ứng dụng: Biết cách nhận diện nhanh chóng nguyên nhân gây nghẽn CPU, rò rỉ bộ nhớ và xác định các tiến trình làm chậm ổ cứng hiệu quả.
- Ví dụ thực hành: Làm chủ kỹ thuật theo dõi hoạt động I/O, CPU và tài nguyên bộ nhớ theo chu kỳ thông qua các kịch bản thực tế sinh động.
- Lưu ý kỹ thuật: Nắm được các nguyên tắc về quyền hạn và khả năng tương thích Kernel để đảm bảo kết quả phân tích dữ liệu hệ thống luôn chính xác.
- Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến lệnh pidstat Linux.
Lệnh pidstat Linux là gì?
pidstat (Process ID Statistics) là một công cụ dòng lệnh thuộc bộ sysstat được sử dụng để giám sát các tiến trình riêng lẻ hiện đang được quản lý bởi nhân Linux. Lệnh này hỗ trợ thu thập nhiều chỉ số quan trọng của tiến trình bao gồm tỷ lệ chiếm dụng CPU, RAM, I/O, context switch,… Khác với các lệnh như vmstat và iostat báo cáo thống kê toàn hệ thống, pidstat đi sâu vào chi tiết của từng tiến trình cụ thể và thường được dùng phổ biến khi cần debug hiệu năng hoặc tìm tiến trình tiêu tốn nhiều tài nguyên.

Cú pháp và tham số phổ biến của lệnh pidstat
Cú pháp cơ bản của lệnh pidstat có dạng như sau:
pidstat [tùy chọn] [khoảng thời gian] [số lần]Trong đó:
[tùy chọn]: Là các tham số như-d,-r,-p,-h,… dùng để chọn loại thống kê như CPU, RAM, I/O, tiến trình, cách hiển thị,…[khoảng thời gian]: Là số giây giữa hai lần lấy mẫu thống kê liên tiếp.[số lần]: Là số chu kỳ lấy mẫu sẽ thực hiện rồi thoát, dùng khi bạn không muốn chạy vô hạn.
Để khai thác tối đa sức mạnh của pidstat, bạn cần nắm vững các tham số quan trọng sau:
| Tùy chọn | Chức năng |
|---|---|
-u | Hiển thị thống kê sử dụng CPU. Đây là tham số mặc định nếu không cung cấp tùy chọn nào. |
-r | Hiển thị thống kê sử dụng bộ nhớ RAM của từng tiến trình. |
-d | Giám sát và hiển thị tốc độ đọc/ghi dữ liệu ổ đĩa.. |
-w | Theo dõi các hoạt động chuyển đổi ngữ cảnh. |
-t | Hiển thị thống kê chi tiết tới cấp độ từng luồng con bên trong một tiến trình. |
-l | Hiển thị đường dẫn thực thi đầy đủ và các đối số thay vì tên lệnh bị cắt ngắn. |
-C [chuỗi] | Lọc tiến trình theo tên lệnh có chứa chuỗi ký tự được chỉ định. |
-p [PID] | Chỉ định đích danh một ID tiến trình (PID) cụ thể để theo dõi. |
Các trường hợp cần sử dụng lệnh pidstat
Dưới đây là các trường hợp cần sử dụng lệnh pidstat:
- Xác định nguyên nhân gây nghẽn CPU: pidstat hiển thị kết quả chi tiết giúp tìm ra chính xác tiến trình đang tiêu tốn nhiều tài nguyên xử lý nhất trong thời gian thực.
- Phát hiện rò rỉ bộ nhớ: Bạn có thể theo dõi sự tăng trưởng của bộ nhớ vật lý và bộ nhớ ảo của một ứng dụng cụ thể qua thời gian để xác định có cần giải phóng RAM sau khi dùng hay không.
- Tìm tiến trình gây nghẽn ổ cứng: Sử dụng pidstat giúp bạn giám sát tốc độ đọc/ghi dữ liệu của từng ứng dụng riêng biệt để tìm ra tiến trình đang làm chậm hệ thống do ghi log hoặc truy xuất database quá mức.
- Phân tích hiện tượng “Major Page Faults”: Bạn có thể dùng pidstat để kiểm tra xem một tiến trình có đang bị chậm do phải liên tục tải dữ liệu từ bộ nhớ Swap lên RAM hay không.
- Kiểm tra hiệu suất đa luồng: Bạn có thể đi sâu vào xem xét tài nguyên tiêu thụ của từng luồng con bên trong một tiến trình lớn để tối ưu hóa code.
- Ghi log giám sát định kỳ: Sử dụng pidstat sẽ giúp bạn để xuất dữ liệu thống kê của một dịch vụ quan trọng ra file theo từng khoảng thời gian để vẽ biểu đồ và phân tích sự cố sau khi đã xảy ra.

Các ví dụ sử dụng lệnh pidstat phổ biến
Theo dõi tất cả tiến trình đang hoạt động
Để xem thông tin của tất cả các tiến trình đang chạy trên hệ thống, bạn sử dụng lệnh sau:
pidstat
Kết quả trả về sẽ hiển thị các cột thông tin quan trọng như sau:
- UID: ID của người dùng sở hữu tiến trình.
- PID: ID định danh của tiến trình.
- %usr: Phần trăm CPU sử dụng ở cấp người dùng (user level).
- %system: Phần trăm CPU sử dụng ở cấp hệ thống (kernel level).
- %guest: Phần trăm CPU sử dụng cho máy ảo (nếu có).
- %wait: Phần trăm CPU mà tiến trình phải chờ đợi để được cấp phát (dấu hiệu nhận biết CPU đang bị quá tải).
- %CPU: Tổng phần trăm CPU mà tiến trình đang sử dụng.
- CPU: Số thứ tự của CPU mà tiến trình đang chạy trên đó.
- Command: Tên của tiến trình.
Mẹo từ chuyên gia: Nếu hệ thống của bạn có quá nhiều tiến trình chạy ngầm, hãy kết hợp với grep để lọc nhanh tiến trình cần quan tâm. Ví dụ: pidstat | grep nginx. Ngoài ra, nếu bạn muốn xuất log để phân tích sau, hãy sử dụng toán tử chuyển hướng >> để lưu kết quả vào file thay vì nhìn trực tiếp trên terminal.
Theo dõi tất cả tiến trình
Nếu bạn muốn liệt kê toàn bộ các tiến trình, bao gồm cả những tiến trình hiện không hoạt động, hãy chạy lệnh:
pidstat -p ALL
Theo dõi hoạt động I/O
Để giám sát thống kê nhập/xuất (Input/Output) của hệ thống, bạn sử dụng lệnh sau:
pidstat -d 1Trong đó:
-d: Tùy chọn hiển thị thông tin đọc/ghi đĩa theo tiến trình.1: Khoảng thời gian cập nhật là mỗi giây.

Các cột thông tin bao gồm:
kB_rd/s: Tốc độ đọc dữ liệu (tính bằng KB/s).kB_wr/s: Tốc độ ghi dữ liệu (tính bằng KB/s).kB_ccwr/s: Dung lượng dữ liệu (KB/s) bị hủy ghi ra đĩa (thường xảy ra khi tiến trình cắt bỏ/xóa một số pagecache bị bẩn trước khi chúng kịp ghi xuống đĩa).iodelay: Độ trễ I/O (tính bằng block clock ticks), cho biết thời gian tiến trình phải chờ đợi I/O hoàn thành. Nếu chỉ số này cao chứng tỏ ổ cứng đang quá tải.
Theo dõi tài nguyên bộ nhớ theo chu kỳ
Để thu thập dữ liệu về bộ nhớ với các thiết lập hiển thị cụ thể, bạn thực hiện lệnh:
pidstat -rh 2 4Trong đó:
-r: Hiển thị thông tin về bộ nhớ.-h: Hiển thị tất cả dữ liệu trên một dòng ngang, sử dụng mốc thời gian dạng Epoch (số giây) và không lặp lại dòng tiêu đề. Tùy chọn này rất hữu ích khi bạn muốn xuất dữ liệu cho các script hoặc phần mềm giám sát khác đọc.2 4: Thu thập dữ liệu tổng cộng 4 lần, mỗi lần cách nhau 2 giây.

Kết quả hiển thị bao gồm:
minflt/s: Số lượng lỗi trang nhỏ trên giây.majflt/s: Số lượng lỗi trang lớn trên giây.VSZ: Dung lượng bộ nhớ ảo sử dụng (KB).RSS: Dung lượng bộ nhớ thực sử dụng (KB).%MEM: Phần trăm bộ nhớ RAM đang được sử dụng.
Mẹo từ chuyên gia: Lựa chọn của chuyên gia: Khi phân tích bộ nhớ, bạn hãy tập trung vào cột RSS (Resident Set Size – dung lượng RAM vật lý thực tế đang bị chiếm dụng). Nếu RSS liên tục tăng sau mỗi chu kỳ mà không giảm xuống, mã nguồn của ứng dụng đó chắc chắn đang gặp lỗi giải phóng bộ nhớ.
Những lưu ý khi sử dụng lệnh pidstat
Dưới đây là những lưu ý quan trọng khi sử dụng lệnh pidstat để đảm bảo kết quả phân tích chính xác và hiệu quả:
- Lưu ý về số liệu lần đầu tiên: Khi chạy pidstat lần đầu và không có tham số thời gian, các con số hiển thị là giá trị trung bình kể từ khi hệ thống khởi động, không phải giá trị thời gian thực hiện tại. Để xem dữ liệu thời gian thực, bạn bắt buộc phải thêm khoảng thời gian.
- Vấn đề với tiến trình ngắn hạn: pidstat hoạt động theo cơ chế lấy mẫu định kỳ. Nếu một tiến trình khởi chạy và kết thúc nhanh chóng nằm giữa hai lần lấy mẫu, pidstat có thể sẽ bỏ sót và không ghi nhận được tiến trình đó.
- Tên lệnh bị cắt ngắn: Mặc định, pidstat chỉ hiển thị tên lệnh ngắn gọn và có thể bị cắt bớt. Để xem đường dẫn đầy đủ và các tham số đi kèm của tiến trình, bạn hãy sử dụng tùy chọn
-l. - Phân biệt giữa Process và Thread: Khi phân tích các ứng dụng đa luồng, bạn cần cẩn trọng để không nhầm lẫn giữa mức tiêu thụ của cả tiến trình và từng luồng con. Mặc định pidstat hiển thị tổng của Process nên nếu muốn xem chi tiết Thread, bạn phải dùng thêm cờ
-t. - Quyền hạn: Mặc dù người dùng thường có thể chạy pidstat để xem tiến trình của chính mình, nhưng để xem thông tin chi tiết về I/O hoặc stack của các tiến trình thuộc về người dùng khác, bạn thường cần chạy lệnh với quyền sudo.
- Đơn vị đo lường I/O: Khi sử dụng cờ
-dđể đo I/O, bạn cần lưu ý rằng các chỉ số kB_rd/s và kB_wr/s phản ánh dữ liệu được đọc/ghi ở tầng block layer, có thể không khớp hoàn toàn với lượng dữ liệu ứng dụng ghi ở tầng logic do cơ chế caching của hệ điều hành. - Khả năng tương thích Kernel: pidstat phụ thuộc vào các tính năng thống kê của nhân Linux nên trên các hệ thống Linux quá cũ hoặc các bản rút gọn, lệnh này có thể không hoạt động hoặc thiếu một số chỉ số.

Câu hỏi thường gặp
Nếu nhận được thông báo lỗi “pidstat: command not found” thì phải xử lý thế nào?
Nguyên nhân gây lỗi chủ yếu là do pidstat không được cài đặt mặc định trên một số bản phân phối Linux. Lệnh này nằm trong gói công cụ giám sát hệ thống tên là sysstat nên bạn cần cài đặt gói này để sử dụng với cú pháp lệnh sau:
– Đối với Ubuntu/Debian: sudo apt install sysstat
– Đối với CentOS/RHEL/Rocky Linux: sudo yum install sysstat hoặc sudo dnf install sysstat
Lệnh pidstat khác gì so với lệnh top?
Mặc dù cả hai lệnh đều được sử dụng để giám sát hệ thống nhưng chúng có mục đích khác nhau:
– top: Cung cấp cái nhìn tổng quan về toàn bộ hệ thống và danh sách các tiến trình tiêu tốn tài nguyên nhất.
– pidstat: Tập trung sâu vào từng tiến trình cụ thể theo thời gian với điểm mạnh là khả năng báo cáo chi tiết về I/O (đọc/ghi đĩa) của từng tiến trình.
Làm thế nào để chỉ theo dõi một tiến trình cụ thể nếu đã biết PID?
Thay vì dùng -p ALL để xem tất cả, bạn có thể chỉ định chính xác PID muốn theo dõi bằng tham số -p. Ví dụ, để theo dõi CPU của tiến trình có PID là 1234, bạn thực hiện lệnh sau đây:pidstat -u -p 1234 2 5
Chỉ số majflt/s cao có ý nghĩa gì?
Nếu bạn thấy chỉ số majflt/s tăng cao trong báo cáo bộ nhớ, điều này có nghĩa là tiến trình đang phải tải dữ liệu từ ổ cứng vào RAM (do dữ liệu không có sẵn trong RAM). Đây là dấu hiệu cho thấy hệ thống đang thiếu RAM và phải sử dụng Swap, làm giảm đáng kể hiệu suất của ứng dụng.
Lệnh pidstat là công cụ hữu ích trong bộ công cụ sysstat, giúp quản trị viên hệ thống có thể đánh giá chi tiết hoạt động của từng tiến trình. Ngoài ra, việc hiểu và áp dụng đúng các tùy chọn sẽ giúp bạn nhanh chóng xác định được nguyên nhân gây nghẽn CPU, thiếu RAM hay I/O chậm để tối ưu hệ thống hiệu quả hơn. Cảm ơn bạn đã theo dõi bài viết!




