Chuyển tới nội dung chính

Theo Dõi Process Linux Với ps Và top

Giới Thiệu

Trong thế giới Linux, việc hiểu rõ những gì đang diễn ra trên hệ thống là cực kỳ quan trọng đối với bất kỳ người dùng hay quản trị viên nào. Các tiến trình (processes) là xương sống của mọi hoạt động, từ ứng dụng bạn đang sử dụng cho đến các dịch vụ nền tảng. Theo dõi các tiến trình giúp bạn nhận diện các ứng dụng tiêu thụ nhiều tài nguyên, phát hiện hành vi bất thường, và duy trì sự ổn định của hệ thống.

Bài viết này sẽ hướng dẫn bạn cách sử dụng hai công cụ dòng lệnh mạnh mẽ và phổ biến nhất để giám sát tiến trình: pstop. ps cung cấp một "ảnh chụp" các tiến trình tại một thời điểm nhất định, trong khi top mang đến cái nhìn động, real-time về hiệu suất hệ thống.

📋 Thời gian: 15 phút | Độ khó: Cơ bản

Yêu Cầu

Để thực hiện theo hướng dẫn này, bạn cần:

  • Một hệ thống Linux đang hoạt động (ví dụ: Ubuntu, CentOS, Debian, Fedora, v.v.).
  • Quyền truy cập vào terminal hoặc cửa sổ dòng lệnh.
  • Kiến thức cơ bản về cách nhập và thực thi lệnh trong terminal.

Các Bước Thực Hiện

Bước 1: Giới thiệu về ps - Xem Snapshot các Process

Lệnh ps (process status) hiển thị thông tin về các tiến trình đang chạy. Nó cung cấp một "ảnh chụp nhanh" tại thời điểm bạn chạy lệnh.

Các tùy chọn phổ biến của ps:

  • ps aux: Hiển thị tất cả các tiến trình của tất cả người dùng, bao gồm cả các tiến trình không có terminal.
    • a: Hiển thị các tiến trình của tất cả người dùng.
    • u: Hiển thị định dạng thân thiện với người dùng (user-oriented format).
    • x: Hiển thị các tiến trình không liên quan đến terminal nào.
  • ps -ef: Hiển thị tất cả các tiến trình ở định dạng đầy đủ (full format).
    • e: Hiển thị tất cả các tiến trình.
    • f: Hiển thị định dạng danh sách đầy đủ.
# Xem tất cả các tiến trình với định dạng thân thiện người dùng
ps aux

# Xem tất cả các tiến trình với định dạng đầy đủ
ps -ef

💡 Mẹo: Bạn có thể kết hợp ps với grep để tìm kiếm một tiến trình cụ thể.

# Tìm kiếm tất cả các tiến trình liên quan đến "apache" hoặc "httpd"
ps aux | grep apache
ps aux | grep httpd

# Tìm kiếm tiến trình "ssh" nhưng loại bỏ chính lệnh grep khỏi kết quả
ps aux | grep '[s]sh'

Bước 2: Hiểu rõ Output của ps

Khi bạn chạy ps aux, bạn sẽ thấy các cột thông tin quan trọng:

  • USER: Tên người dùng sở hữu tiến trình.
  • PID: ID của tiến trình (Process ID). Đây là số nhận dạng duy nhất cho mỗi tiến trình.
  • %CPU: Phần trăm CPU mà tiến trình đang sử dụng.
  • %MEM: Phần trăm bộ nhớ vật lý (RAM) mà tiến trình đang sử dụng.
  • VSZ: Kích thước bộ nhớ ảo (Virtual Memory Size) mà tiến trình đang sử dụng (tính bằng KB).
  • RSS: Kích thước bộ nhớ thực tế (Resident Set Size) mà tiến trình đang giữ trong RAM (tính bằng KB).
  • TTY: Terminal mà tiến trình đang chạy (ví dụ: pts/0, tty1). ? có nghĩa là không có terminal nào liên quan (thường là các dịch vụ nền).
  • STAT: Trạng thái của tiến trình (ví dụ: R - đang chạy, S - ngủ gián đoạn, D - ngủ không gián đoạn, Z - zombie, T - dừng).
  • START: Thời gian tiến trình bắt đầu.
  • TIME: Tổng thời gian CPU mà tiến trình đã sử dụng.
  • COMMAND: Lệnh đã khởi chạy tiến trình.

Bước 3: Sử dụng top - Theo Dõi Real-time

Lệnh top cung cấp một cái nhìn động, real-time về trạng thái của hệ thống và các tiến trình. Nó hiển thị các tiến trình được sắp xếp theo mức độ sử dụng CPU mặc định và tự động cập nhật sau mỗi vài giây.

# Chạy top để xem các tiến trình theo thời gian thực
top

Giải thích Output của top:

Phần Header (tóm tắt hệ thống):

  • Dòng 1 (top): Thời gian hiện tại, thời gian hệ thống đã hoạt động (uptime), số người dùng đang đăng nhập, và tải trung bình của hệ thống (load average) trong 1, 5, 15 phút gần nhất.
  • Dòng 2 (Tasks): Tổng số tiến trình, số tiến trình đang chạy (running), ngủ (sleeping), dừng (stopped) và zombie.
  • Dòng 3 (Cpu(s)): Phần trăm sử dụng CPU cho người dùng (us), hệ thống (sy), nice (ni), idle (id), chờ I/O (wa), xử lý ngắt cứng (hi), xử lý ngắt mềm (si), steal time (st).
  • Dòng 4 (Mem): Tổng bộ nhớ vật lý (total), bộ nhớ đã sử dụng (used), bộ nhớ trống (free), và bộ nhớ đệm (buffers/cache).
  • Dòng 5 (Swap): Tổng dung lượng swap, swap đã sử dụng, swap trống và bộ nhớ khả dụng (avail Mem).

Phần Process List (danh sách tiến trình): Tương tự như ps, nhưng được cập nhật liên tục và có một số cột khác:

  • PID: ID tiến trình.
  • USER: Tên người dùng.
  • PR: Độ ưu tiên của tiến trình (Priority).
  • NI: Giá trị Nice của tiến trình. Giá trị thấp hơn có nghĩa là ưu tiên cao hơn (từ -20 đến 19).
  • VIRT: Tổng bộ nhớ ảo mà tiến trình đang sử dụng.
  • RES: Bộ nhớ vật lý (RAM) mà tiến trình đang sử dụng (Resident Size).
  • SHR: Bộ nhớ chia sẻ (Shared Memory) mà tiến trình đang sử dụng.
  • S: Trạng thái của tiến trình (S=Sleeping, R=Running, Z=Zombie, D=Disk sleep, T=Stopped).
  • %CPU: Phần trăm CPU mà tiến trình đang sử dụng.
  • %MEM: Phần trăm bộ nhớ vật lý mà tiến trình đang sử dụng.
  • TIME+: Tổng thời gian CPU mà tiến trình đã sử dụng, tính bằng mili giây.
  • COMMAND: Lệnh khởi chạy tiến trình.

Bước 4: Tương tác với top

Khi top đang chạy, bạn có thể sử dụng các phím sau để tương tác:

  • q: Thoát khỏi top.
  • k: Kill một tiến trình. Bạn sẽ được yêu cầu nhập PID.
  • r: Thay đổi giá trị nice (độ ưu tiên) của một tiến trình. Bạn sẽ được yêu cầu nhập PID và giá trị nice mới.
  • P: Sắp xếp các tiến trình theo mức sử dụng CPU (mặc định).
  • M: Sắp xếp các tiến trình theo mức sử dụng bộ nhớ.
  • T: Sắp xếp các tiến trình theo thời gian chạy.
  • 1: Hiển thị tải CPU cho từng lõi CPU (nếu có nhiều lõi).
  • d hoặc s: Thay đổi khoảng thời gian cập nhật màn hình (mặc định là 3 giây).

Bạn cũng có thể khởi chạy top với các tùy chọn ban đầu:

# Chỉ hiển thị các tiến trình của người dùng "root"
top -u root

# Chỉ hiển thị một tiến trình cụ thể bằng PID
top -p 12345

Bước 5: Các Lệnh Quản Lý Tiến Trình Khác

Ngoài pstop, có một số lệnh khác hữu ích:

  • pgrep: Tìm kiếm PID của các tiến trình dựa trên tên.
# Tìm PID của tiến trình apache2
pgrep apache2
  • pkill: Gửi tín hiệu (mặc định là SIGTERM để kết thúc) đến các tiến trình dựa trên tên.
# Gửi tín hiệu kết thúc (SIGTERM) đến tất cả các tiến trình có tên "firefox"
pkill firefox
  • kill: Gửi tín hiệu đến một tiến trình bằng PID của nó.
# Gửi tín hiệu kết thúc (SIGTERM) đến tiến trình có PID 12345
kill 12345

# Gửi tín hiệu buộc dừng (SIGKILL - tín hiệu 9) đến tiến trình có PID 12345
# ⚠️ Cảnh báo: Sử dụng kill -9 chỉ khi các phương pháp khác không hiệu quả,
# nó có thể làm mất dữ liệu hoặc gây ra trạng thái không mong muốn.
kill -9 12345

Troubleshooting

  • ⚠️ Lỗi: "command not found" cho top hoặc ps:

    • Giải pháp: Cả pstop đều là các công cụ tiêu chuẩn và thường được cài đặt sẵn trên hầu hết các bản phân phối Linux. Nếu bạn gặp lỗi này, hãy đảm bảo rằng biến môi trường PATH của bạn đã được cấu hình đúng và chứa các thư mục /bin hoặc /usr/bin. Nếu không, có thể hệ thống của bạn bị lỗi nghiêm trọng hoặc bạn đang ở trong một môi trường rất hạn chế.
  • ⚠️ Vấn đề: Hệ thống chạy chậm, CPU hoặc RAM sử dụng cao:

    • Giải pháp: Sử dụng top để xác định tiến trình nào đang tiêu thụ nhiều %CPU hoặc %MEM nhất. Khi đã xác định được, bạn có thể:
      • Điều tra xem tiến trình đó có phải là một ứng dụng bạn đang sử dụng không.
      • Nếu là một dịch vụ, kiểm tra log của dịch vụ đó để tìm lỗi.
      • Nếu là tiến trình không mong muốn hoặc bị lỗi, cân nhắc kết thúc nó bằng lệnh kill (hoặc k trong top).
      • 💡 Mẹo: Đôi khi, một tiến trình có thể bị "kẹt" ở trạng thái D (Disk sleep), cho thấy nó đang chờ I/O và có thể là nguyên nhân gây chậm hệ thống.
  • ⚠️ Vấn đề: top cập nhật quá nhanh/chậm:

    • Giải pháp: Khi top đang chạy, nhấn phím d (hoặc s) sau đó nhập giá trị giây mong muốn cho khoảng thời gian cập nhật. Ví dụ: nhập 1 để cập nhật mỗi giây.

Kết Luận

Việc làm chủ các lệnh pstop là kỹ năng cơ bản nhưng cực kỳ quan trọng đối với bất kỳ ai làm việc với Linux. Chúng không chỉ giúp bạn giám sát sức khỏe hệ thống mà còn là công cụ không thể thiếu để khắc phục sự cố, tối ưu hóa hiệu suất và quản lý tài nguyên.

Best practices:

  • Kiểm tra thường xuyên: Định kỳ sử dụng top để có cái nhìn tổng quan về hệ thống của bạn.
  • Kết hợp công cụ: Sử dụng ps để lấy thông tin chi tiết về một tiến trình cụ thể sau khi đã xác định nó bằng top.
  • Thận trọng với kill: Luôn ưu tiên dùng kill không có -9 trước. Chỉ dùng kill -9 khi tiến trình không phản hồi.

Nắm vững hai công cụ này, bạn sẽ có khả năng kiểm soát và hiểu rõ hơn về hệ thống Linux của mình.