Đố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
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ả:
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.
Để 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
Để 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é.
Leave a Reply