Đọc Hiểu Toàn Bộ Các Giá Trị Trong Lệnh htop

Cẩm nang giải mã toàn diện giao diện htop qua ảnh chụp thực tế: Phân tích 24 CPU cores, RAM/Swap meters, phân biệt VIRT/RES/SHR, Nice/Priority và các phím tắt điều khiển nâng cao.

Trong quản trị hệ thống Linux, trong khi lệnh top cổ điển hiển thị văn bản đen trắng đơn điệu, htop là công cụ giám sát thời gian thực tương tác (Interactive Process Viewer) được các kỹ sư SRE và DevOps yêu thích nhất nhờ giao diện trực quan, bảng màu sinh động và khả năng điều hướng cực nhanh.

Dưới đây là ảnh chụp màn hình một hệ thống Linux Production thực tế đang chạy htop:

Giao diện giám sát hệ thống với htop thực tế

Hãy cùng giải mã chi tiết từng con số, từng dải màu và từng cột dữ liệu xuất hiện trên màn hình này dưới lăng kính của một Chuyên gia Vận hành Hệ thống.


1. Khu Vực Đo Lường Hệ Thống (Phần Đầu - Header Meters)

Màn hình phía trên cung cấp bức tranh toàn cảnh về sức khỏe phần cứng của máy chủ tại thời điểm hiện tại:

 0[||     2.0%]   3[|      0.7%]   6[|      0.7%]   ...  21[|     0.7%]
 1[|      0.7%]   4[       0.0%]   7[|      0.7%]   ...  22[||    1.3%]
 2[|      0.7%]   5[|      0.7%]   8[||     5.3%]   ...  23[|     0.7%]
Mem[||||||||||||||||||||||||||||||||||||||||| 1.99G/15.5G]
Swp[                                             0K/4.00G]

1.1. Các thanh CPU (Từ Core 0 đến Core 23)

Hệ thống trong ảnh được trang bị tới 24 CPU Cores logic (đánh số từ 0 đến 23). htop hiển thị mức độ bận rộn của từng core riêng biệt.

Ý nghĩa các dải màu trên thanh đo CPU:

  • 🟢 Xanh lá cây (User): Tỷ lệ CPU tiêu tốn bởi các tiến trình của người dùng/ứng dụng thông thường (User space processes như Mongosh, Redis, Node.js).
  • 🔴 Đỏ (System / Kernel): Tỷ lệ CPU tiêu tốn bởi nhân Linux Kernel để xử lý các System Calls, ngắt mạng, điều khiển phần cứng.
  • 🔵 Xanh dương (Low-priority / Nice): CPU dành cho các tiến trình có độ ưu tiên thấp (Nice > 0).
  • 🟡 Vàng / Cam (IRQ / SoftIRQ): Thời gian CPU phục vụ các yêu cầu ngắt phần cứng hoặc phần mềm.
  • 🟣 Tím (Steal Time): Trong môi trường máy ảo (Cloud VM/VPS), đây là tỷ lệ CPU bị phần mềm quản lý ảo hóa (Hypervisor) "lấy trộm" để cấp cho máy ảo khác.
  • ⚪ Xanh lơ / Cyan (I/O Wait): CPU rảnh rỗi nhưng phải đứng đợi ổ cứng đọc/ghi dữ liệu.

💡 Nhận định thực tế: Hầu hết các core trong ảnh chỉ dao động từ 0.0% đến 5.3%. Điều này chứng tỏ CPU của máy chủ đang hoạt động cực kỳ nhẹ nhàng, dư thừa năng lực xử lý.


1.2. Thanh Bộ Nhớ RAM (Mem) & Bộ Nhớ Ảo (Swp)

  • Mem [ 1.99G/15.5G ]: Tổng dung lượng RAM vật lý của server là 15.5 GB, và hiện tại đang sử dụng 1.99 GB.
    • 🟢 Màu xanh lá: Lượng RAM đang thực sự bị các ứng dụng chiếm giữ (Used Memory).
    • 🔵 Màu xanh dương: Vùng đệm đĩa (Buffers).
    • 🟡 Màu vàng / cam: Bộ nhớ đệm đọc file (Page Cache).
  • Swp [ 0K/4.00G ]: Phân vùng Swap có tổng dung lượng 4.00 GB, và hiện tại đang dùng 0 KB (hoàn toàn chưa đụng tới Swap).
    • 🎯 Góc nhìn SRE: Khi Swap = 0K và RAM trống còn rất nhiều, hệ thống đang ở trạng thái tối ưu, không có hiện tượng nghẽn bộ nhớ hay nguy cơ bị OOM Killer can thiệp.

1.3. Chỉ Số Tổng Hợp (Góc Trên Bên Phải)

Tasks: 92, 343 thr, 0 kthrr; 2 running
Load average: 0.05 0.18 0.20
Uptime: 01:37:44
Chỉ sốGiá trị trong ảnhGiải thích chi tiết
Tasks92Tổng số tiến trình (Processes) độc lập đang tồn tại trên hệ thống
thr343Tổng số luồng thực thi (Threads) được tạo ra bởi các tiến trình trên
kthrr0Số lượng luồng của Kernel (Kernel threads)
running2Chỉ có đúng 2 luồng đang thực sự chạy trên CPU tại thời điểm chụp ảnh (các luồng còn lại đang ở trạng thái ngủ/chờ sự kiện)
Load average0.05 0.18 0.20Tải trung bình của hệ thống trong 1 phút, 5 phút và 15 phút gần nhất
Uptime01:37:44Máy chủ đã hoạt động liên tục được 1 giờ, 37 phút, 44 giây kể từ lần khởi động gần nhất

[!NOTE] Quy tắc vàng phân tích Load Average: Máy chủ có 24 Cores, nghĩa là ngưỡng chịu tải tối đa lý tưởng là 24.00. Mức tải hiện tại chỉ là 0.05, tương đương hệ thống chỉ đang dùng chưa tới 0.3% công suất tổng thể!


2. Bảng Danh Sách Tiến Trình (Process List Table)

Nửa dưới màn hình là bảng danh sách các tiến trình đang hoạt động:

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 3372 root       20   0 1303M  208M 87904 R  4.6  1.3 0:00.07 mongosh --quiet --eval db.adminCommand('ping').ok
  340 root       20   0 2648M 59512     0 S  0.7  0.4 0:01.29 /usr/bin/containerd
  791 999        20   0 39392  9632  6244 S  0.7  0.1 0:33.75 redis-server *:6379
  966 65532      20   0 1271M 38456     0 S  0.7  0.2 0:02.74 /app
 3715 root       20   0 3786M  110M     0 S  0.7  0.7 0:00.62 /usr/bin/dockerd -H fd:// ...
   46 root       19  -1 50400 17116 15796 S  0.0  0.1 0:00.13 /usr/lib/systemd/systemd-journald

2.1. Nhóm Định Danh & Phân Quyền (PID, USER, PRI, NI)

  • PID (Process ID): Số nguyên định danh duy nhất cho từng tiến trình.
  • USER: Tài khoản người dùng sở hữu tiến trình:
    • root: Tài khoản quản trị tối cao.
    • 999: User hệ thống được tạo riêng cho dịch vụ Redis (redis-server).
    • 65532: User không đặc quyền (non-root) thường dùng trong các Distroless Container để chạy ứng dụng /app.
  • PRI (Priority) & NI (Nice Value):
    • PRI: Mức độ ưu tiên thực tế do bộ lập lịch của Kernel (Linux CFS Scheduler) quyết định. Mặc định là 20.
    • NI: Giá trị điều chỉnh độ ưu tiên thủ công (chạy từ -20 đến 19):
      • Giá trị càng âm: Độ ưu tiên càng cao (ích kỷ, đòi nhiều CPU hơn).
      • Giá trị càng dương: Độ ưu tiên càng thấp (lịch sự, nhường CPU cho process khác).
      • 🔍 Ví dụ trong ảnh: Tiến trình PID 46 (systemd-journald) có NI = -1 và PRI = 19, cho thấy dịch vụ ghi log hệ thống này được ưu tiên hơn các tiến trình bình thường để đảm bảo không bị rớt log.

2.2. Bộ Ba Chỉ Số Bộ Nhớ: VIRT, RES, SHR (Điểm Dễ Gây Hiểu Lầm Nhất!)

Đây là phần khiến nhiều kỹ sư bối rối nhất. Hãy phân biệt rõ bản chất của chúng:

CộtTên đầy đủBản chất kỹ thuậtGiá trị ví dụ trong ảnh
VIRTVirtual Memory SizeTổng dung lượng bộ nhớ ảo mà tiến trình xin Kernel cấp phát. Bao gồm mã chương trình, thư viện .so, bộ nhớ heap/stack và cả những trang nhớ chưa thực sự được ghi dữ liệuPID 3715 (dockerd) có VIRT = 3786M (gần 3.8GB)
RESResident Memory SizeDung lượng RAM vật lý THỰC TẾ mà tiến trình đang chiếm giữ trong thanh RAM của máy. Đây mới là con số thực phản ánh mức tiêu tốn tài nguyên!PID 3715 (dockerd) có RES = 110M (chỉ tiêu tốn 110MB RAM thực tế)
SHRShared Memory SizeLượng bộ nhớ có thể chia sẻ chung với các tiến trình khác (chủ yếu là các thư viện dùng chung như libc.so, libcrypto.so)PID 3372 (mongosh) có SHR = 87904 KB (~85MB)

[!WARNING] ❌ Hiểu lầm tai hại: Nhìn thấy VIRT của một ứng dụng lên tới 4GB hay 8GB rồi hốt hoảng nghĩ rằng server sắp hết RAM! ✅ Quy tắc chuẩn: Luôn nhìn vào cột RES để biết ứng dụng đang thực sự chiếm bao nhiêu megabyte RAM vật lý.


2.3. Trạng Thái, Tài Nguyên Tiêu Thụ & Lệnh (S, CPU%, MEM%, TIME+, Command)

  • S (State - Trạng thái tiến trình):
    • R (Running): Đang chạy trên CPU (như PID 3372 mongosh).
    • S (Sleeping): Đang ngủ chờ tài nguyên mạng/I/O (hầu hết các daemon nền đều ở trạng thái này).
    • D (Uninterruptible Sleep): Đang chờ ổ cứng/phần cứng, không thể kill bằng kill -9.
    • Z (Zombie): Tiến trình đã kết thúc nhưng chưa được cha dọn dẹp.
  • CPU%: Tỷ lệ phần trăm sức mạnh của 1 Core CPU mà tiến trình đang dùng tại thời điểm làm mới màn hình (PID 3372 chiếm 4.6%).
  • MEM%: Tỷ lệ phần trăm tổng dung lượng RAM vật lý của server mà tiến trình đang chiếm (RES / 15.5GB). Ví dụ PID 3372 chiếm 1.3% RAM.
  • TIME+: Tổng thời gian CPU tích lũy mà tiến trình đã tiêu tốn kể từ khi khởi chạy (Ví dụ PID 791 Redis đã tích lũy 0:33.75 giây thời gian xử lý CPU).
  • Command: Đường dẫn file nhị phân và toàn bộ các tham số khởi chạy của tiến trình:
    • PID 3372: Lệnh chạy script kiểm tra định kỳ sức khỏe cơ sở dữ liệu mongosh --quiet --eval db.adminCommand('ping').ok.
    • PID 340 & 3715: Runtime quản lý container containerd và Docker daemon dockerd.
    • PID 791: Cơ sở dữ liệu in-memory redis-server *:6379.
    • PID 966 & 1321: Ứng dụng nghiệp vụ chính /app.
    • PID 1: Tiến trình khởi tạo gốc của hệ thống /sbin/init (Systemd).

3. Các Phím Chức Năng Nâng Cao (Thanh Menu Dưới Cùng)

Thanh màu xanh dưới cùng liệt kê các phím tắt từ F1 đến F10 giúp bạn điều khiển hệ thống bằng một chạm:

F1Help F2Setup F3Search F4Filter F5Tree F6SortBy F7Nice -F8Nice +F9Kill F10Quit
Phím tắtTên chức năngỨng dụng thực chiến của SRE
F1HelpMở bảng hướng dẫn tra cứu phím tắt chi tiết
F2SetupTùy biến giao diện: Thêm/bớt cột, đổi kiểu hiển thị CPU sang dạng đồ thị, đổi màu sắc giao diện
F3SearchTìm kiếm tiến trình theo tên hoặc PID (nhấn F3 nhiều lần để nhảy đến kết quả tiếp theo)
F4FilterBộ lọc cực mạnh: Chỉ hiển thị các dòng khớp với từ khóa (Ví dụ gõ redis để màn hình chỉ còn lại các tiến trình Redis)
F5Tree ViewChế độ hiển thị cây phả hệ (Cha - Con): Giúp bạn nhận diện ngay tiến trình cha (PPID) nào đã sinh ra các tiến trình con
F6SortByChọn tiêu chí sắp xếp bảng: Xếp theo CPU%, MEM%, PID hoặc TIME+
F7 / F8Nice - / Nice +Tăng (F7) hoặc giảm (F8) độ ưu tiên của tiến trình đang chọn
F9KillMở menu gửi tín hiệu Signal trực tiếp (mặc định là 15 SIGTERM, có thể chọn 9 SIGKILL hoặc 1 SIGHUP)
F10QuitThoát khỏi htop an toàn (hoặc phím tắt q)

🚀 Mẹo Phím Tắt Nhanh Cho Chuyên Gia (Không Cần Nhấn F-keys)

  • P (Shift + P): Sắp xếp danh sách tiến trình ngay lập tức theo tiêu thụ CPU cao nhất.
  • M (Shift + M): Sắp xếp danh sách ngay lập tức theo tiêu thụ RAM (RES) cao nhất.
  • T (Shift + T): Sắp xếp theo thời gian chạy CPU (TIME+) lâu nhất.
  • Space (Phím cách): Đánh dấu (Tag) một tiến trình. Bạn có thể đánh dấu nhiều tiến trình cùng lúc rồi nhấn F9 để kill đồng loạt.
  • c: Đánh dấu một tiến trình cùng toàn bộ các tiến trình con của nó.
  • U (Shift + U): Lọc và chỉ xem các tiến trình của một User cụ thể.
  • l (chữ L thường): Xem danh sách tất cả các file mà tiến trình đang mở (tương đương lệnh lsof -p <PID>).

Bài tiếp theo đề xuất: Đọc Hiểu Toàn Bộ Các Giá Trị Trong Lệnh free – Giải mã chi tiết các chỉ số RAM, Buff/Cache, Swap và dòng Comm (free -v -h) từ ảnh chụp thực tế.