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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.