Bagaimana cara mengetahui cgroup dari proses tertentu?

17

Apakah ada metode untuk mendapatkan cgroupproses?

Satu-satunya paket yang saya tahu ( cgroup-bin), hanya menyediakan beberapa manipulasi dengan cgroup dan memungkinkan untuk mengubah cgroup proses / daftar proses, tetapi tidak ada kemampuan untuk mengetahui informasi tentang cgroup dari proses tertentu.

zerospiel
sumber
9
Cobaps -o cgroup <pid>
Matthew Ife
5
cat / proc / <pid> / cgroup
c4f4t0r
@ Ife, ya, Anda benar, sangat banyak. Inilah yang saya butuhkan
zerospiel
@ c4f4t0r, metode Anda tidak begitu baik, itu hanya output kepada saya semua pengontrol yang tersedia, tetapi tidak cgroup dari suatu proses, tetapi juga Anda.
zerospiel
@MIfe itu benar, maaf, opsi lain adalah grep pada file tugas, misalnya grep <pid> / cgroup / cpuset / app1 / Tugas
c4f4t0r

Jawaban:

15

Menggunakan systemd (PID 3378 misalnya):

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

Menggunakan 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

Melihat ke / 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
Rfraile
sumber
Perintah terakhir akan cocok dengan data tentang proses yang pid 13378, atau 23378, atau 33378, dll.
Patrick Mevzek
8

Cara tercepat untuk melihat cgroup dari suatu proses adalah dengan nama proses, menggunakan skrip bash ini:

#!/bin/bash
THISPID=`ps -eo pid,comm | grep $1 | awk '{print $1}'`
cat /proc/$THISPID/cgroup
John Greene
sumber
4
gunakan pgrep, tidakps | grep | awk
Patrick
4

Dari RHEL7 ke atas, dan pada beberapa distro lain, saya menemukan util ini bermanfaat:

$ systemd-cgtop

Sebelum menggunakannya, pastikan Anda sudah DefaultCPUAccounting=yesmasuk /etc/systemd/system.conf.

Saya bahkan membuat beberapa perbaikan pada skrip Egbert yang masih berguna dan menggunakan saran Patrick untuk menggunakan 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
Dirk Krijgsman
sumber