Cách tìm cpu và sử dụng bộ nhớ của các tiến trình con


9

supervisordđang chạy trên máy chủ CentOS. Nếu tôi làm

ps -e -o %mem,%cpu,cmd | grep supervisord | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'

Tôi nhận được 0 0chỉ vì supervisordchỉ là một daemon khởi tạo. Nó chạy bốn tiến trình con trên máy chủ của tôi:

# pgrep -P $(pgrep supervisord) | wc -l
4

Làm cách nào tôi có thể tìm thấy việc sử dụng CPU và bộ nhớ tóm tắt của các tiến trình con này trong lệnh một dòng?

Câu trả lời:


5

mật mã

pgrep -P $(pgrep supervisord) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'

sẽ chỉ nhận được một lớp con

Nếu bạn muốn tìm kiếm tất cả các quy trình được lấy từ một trang chính, hãy sử dụng mã này ..

ps -o pid,ppid,pgid,comm,%cpu,%mem  -u {user name} | {grep PID_PRINCIPAL}

Mấu chốt của processe chính là PGID của các tiến trình con.


5

Cho một pid,

pid=24535
pstree -p $pid | grep -o '([0-9]\+)' | grep -o '[0-9]\+' |\
  xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
# 15.5 905.2

Tôi không có may mắn nhận được các pids của tất cả các quá trình con từ pgrep.


2
% cpu trong ps, trên thực tế, có vấn đề. Nó được tính như CPU time used divided by the time the process has been running- nghĩa là trung bình lịch sử của% sử dụng CPU, không phải giá trị hiện tại của nó.
— VladV

-1

Hãy thử sử dụng xargs:

pgrep -P $(pgrep supervisord) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.