Lệnh PS trong Linux, những tùy chọn đáng dùng

Đối với dân sysadmin nói riêng và người dùng Linux nói chung, lệnh PS có thể nói là một trong những “lệnh bất ly thân” mà anh/em nào dùng Linux cũng đều từng dăm ba lần sử dụng. Tuy nhiên, lệnh PS có rất nhiều tùy chọn, dùng sao cho hiệu quả và phát huy được tác dụng của lệnh PS nhỉ? Trong bài viết trước, cloud365 đã giới thiệu phần cơ bản về lệnh PS. Còn trong bài viết này, chúng tôi sẽ lọc ra các lệnh ps với các tùy chọn hoặc kết hợp cùng các lệnh khác để xử lý mỗi khi cần.

Lệnh PS phát huy trong các ngữ cảnh khi bạn cần xử lý các sự cố, xử lý các phản hồi của người dùng về tình trạng máy bị treo hoặc khi nghi ngờ có các tiến trình lạ do bị xâm nhập trái phép (hack) gì đó.

Do vậy một trong các bước kiểm tra căn bản là quan sát các tiến trình thông qua lệnh ps.

Nếu chỉ quan sát thông thường thì ta chỉ cần gõ lệnh ps với một vài tùy chọn dạng như sau

ps -xau

hoặc 

ps -eof

hoặc thậm chí đơn giản nhất là

ps 

Tuy nhiên, với các lệnh trên thì hiển thị của PS vẫn chưa xoáy được vào các mục tiêu ta cần theo dõi. Ví dụ ở một số tình huống:

  • Tôi muốn biết tiến trình nào đang dùng nhiều RAM?
  • Tôi muốn biết tiến trình nào đang dùng nhiều CPU?
  • Tiến trình cha đang sinh ra các tiến trình con nào?
  • Tôi muốn quan sát theo thời gian thực (1s một lần) các tiến trình đang dùng nhiều RAM hoặc CPU nhất.
  • Tiến trình nào đang treo do I/O đang quá tải (tạm hiểu là disk đang quá tải ở việc đọc ghi).

Lệnh PS có làm được các việc trên không nhỉ? Câu trả lời chắc chắn là CÓ. Sau đây là các tùy chọn mà cloud365 cảm thấy ưng ý nhất, mời các bạn theo dõi và cùng thực hành.

1. Hiện thị các process và tiến trình con của nó

Nếu không có thêm tùy chọn, ta chỉ nhìn thấy các process và không hiển thị các tiến trình con của chúng. Để hiển thị tiến trình con nằm trong các tiến trình cha nào thì ta dùng tùy chọn ps -aef --forest.

Việc hiển thị này hữu ích khi ta xử lý tìm các tiến trình lạ và mối liên quan của chúng khi tìm hiểu các nguyên nhân chiếm nhiều CPU, RAM.

Ví dụ, tìm các tiến trình con của process có tên là nginx ta sẽ thực hiện như sau

ps -aef --forest | egrep nginx

Kết quả ta sẽ thấy như bên dưới

Hiển thị các tiến trình con của process nginx

Nên sử dụng thêm lệnh grep để lọc theo tên các tiến trình cho gọn gàng.

2. Hiển thị các process sử dụng nhiều RAM nhất theo thứ tự từ cao xuống thấp.

 ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

Kết quả:

Hiển thị các process sử dụng nhiều RAM nhất.

3. Hiển thị các process sử dụng nhiều CPU nhất từ cao tới thấp

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head

Kết quả: Ta thấy tiến trình có PID 169789 đang sử dụng 67% CPU.

Đối với việc sử dụng thuần lệnh PS ở trên ta xem ở dạng tĩnh , để xem dạng thời gian thực ta dùng kết hợp với lệch watch.

4. Theo dõi xem process nào đang sử dụng nhiều CPU nhất

watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu'

Kết quả của lệnh trên sẽ hiển thị giống như bên dưới, dữ liệu được cập nhật 1 giây một lần.

Dữ liệu của lệnh trên sẽ thay đổi 1 giây 1 lần.

Để thoát khỏi cửa sổ trên, nhấn tổ hợp phím CTL + C để thoát.

5. Theo dõi xem process nào đang sử dụng nhiều RAM nhất

Sử dụng lệnh watch với tùy chọn -n 1 để hiển thị 1 giây một lần.

watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem'

Kết quả của lệnh trên hiển thị như ảnh dưới

Hiện thị 1 giây một lần các tiến trình dùng nhiều RAM nhất.

Để thoát khỏi cửa sổ trên, nhấn tổ hợp phím CTL + C để thoát.

6. Kiểm tra xem có process nào bị treo bởi trạng thái IOWait

Đây là trạng thái mà tiến trình gặp phải khi xuất hiện hiện tượng IOWait cao (thường là do ổ cứng bị quả tải về I/O). Lệnh này hữu ích khi kiểm tra xem hoạt động của database có bị chậm hay không.

Ta dùng một trong các cách bên dưới để kiểm tra

ps aux | awk '{if ($8 ~ "D") print $0}'

hoặc

watch -d -n 1 "(ps aux | awk '\$8 ~ /D/ { print \$0 }')"

Trong hướng dẫn này cloud365 đã chia sẻ lại các tùy chọn với PS mà chúng tôi dùng trong quá trình quản trị & vận hành các hệ thống. Nếu bạn thấy tâm đắc các tùy chọn với lệnh ps hoặc các lệnh khác, xin hãy để comment ở bên dưới nhé.

Tham khảo

  1. https://8gwifi.org/docs/linux-ps-commands.jsp
  2. https://news.cloud365.vn/ps-command-tim-hieu-va-huong-dan-su-dung/