Làm thế nào để tìm ra nhóm của một quá trình cụ thể?


17

Có phương pháp nào để có được cgroupquá trình?

Gói duy nhất mà tôi biết ( cgroup-bin), chỉ cung cấp một số thao tác với các nhóm và cho phép thay đổi nhóm quy trình / danh sách các quy trình, nhưng không có khả năng biết thông tin về nhóm của một quy trình cụ thể.


9
Hãy thửps -o cgroup <pid>
Matthew Ife

5
mèo / Proc / <pid> / cgroup
c4f4t0r

@MIfe, vâng, bạn nói đúng, ty rất nhiều. Đây là những gì tôi cần
zerospiel

@ c4f4t0r, phương pháp của bạn không tốt lắm, nó chỉ xuất ra cho tôi tất cả các bộ điều khiển có sẵn, nhưng không phải là nhóm của một quá trình, nhưng cũng buộc bạn.
zerospiel

@MIfe đó là sự thật, xin lỗi, tùy chọn khác là grep trên tệp tác vụ, ví dụ grep <pid> / cgroup / cpuset / app1 / task
c4f4t0r

Câu trả lời:


15

Sử dụng systemd (ví dụ: PID 3378):

# systemctl status 3378 | grep CGroup
CGroup: /user.slice/user-1000.slice/session-3.scope

Sử dụng Proc:

# cat /proc/3378/cgroup 
10:memory:/user.slice/user-1000.slice
9:blkio:/user.slice/user-1000.slice
8:net_cls,net_prio:/
7:cpu,cpuacct:/user.slice/user-1000.slice
6:perf_event:/
5:freezer:/
4:cpuset:/
3:pids:/user.slice/user-1000.slice
2:devices:/user.slice/user-1000.slice
1:name=systemd:/user.slice/user-1000.slice/session-3.scope

Nhìn vào / sys /:

# cd /sys/fs/ && find * -name "*.procs" -exec grep 3378 {} /dev/null \; 2> /dev/null
cgroup/memory/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/blkio/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/net_cls,net_prio/cgroup.procs:3378
cgroup/cpu,cpuacct/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/perf_event/cgroup.procs:3378
cgroup/freezer/cgroup.procs:3378
cgroup/cpuset/cgroup.procs:3378
cgroup/pids/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/devices/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/systemd/user.slice/user-1000.slice/session-3.scope/cgroup.procs:3378

Lệnh cuối cùng cũng khớp với dữ liệu về quá trình có pid 13378, hoặc 23378, hoặc 33378, v.v.
Patrick Mevzek

8

Cách nhanh nhất để xem cgroup của một tiến trình là theo tên tiến trình, sử dụng tập lệnh bash này:

#!/bin/bash
THISPID=`ps -eo pid,comm | grep $1 | awk '{print $1}'`
cat /proc/$THISPID/cgroup

4
sử dụng pgrep, khôngps | grep | awk
Patrick

4

Từ RHEL7 trở lên, và trên một số bản phân phối khác, tôi thấy ứng dụng này hữu ích:

$ systemd-cgtop

Trước khi sử dụng nó, chắc chắn rằng bạn có DefaultCPUAccounting=yestrong /etc/systemd/system.conf.

Tôi thậm chí đã thực hiện một số cải tiến cho kịch bản của Egbert vẫn còn hữu ích và đã sử dụng đề xuất của Patrick để sử dụng pgrep:

#!/bin/bash
echo "PID  SLICE   SERVICE"
for THISPID in `pgrep $1`; do
  SLICE=$(cat /proc/$THISPID/cgroup | grep '^1:' | awk -F/ '{ print $2 }')
  SERVICE=$(cat /proc/$THISPID/cgroup | grep '^1:' | awk -F/ '{ print $3 }')
  echo "$THISPID $SLICE $SERVICE"
done
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.