Come scoprire cgroup di un particolare processo?


18

Esiste un metodo per ottenere il cgroupprocesso?

L'unico pacchetto che conosco ( cgroup-bin), fornisce solo alcune manipolazioni con i cgroups e consente di cambiare il cgroup del processo / elenco dei processi, ma nessuna capacità di conoscere informazioni sul cgroup di un particolare processo.


10
Provaps -o cgroup <pid>
Matthew Ife,

5
cat / proc / <pid> / cgroup
c4f4t0r

@Mefe, sì, hai ragione, molto. Questo è ciò di cui ho bisogno
zerospiel,

@ c4f4t0r, il tuo metodo non è così buono, mi ha appena prodotto tutti i controller disponibili, ma non un cgroup di un processo, ma anche a te.
zerospiel,

@MIfe è vero, scusate, un'altra opzione è grep sul file delle attività, ad esempio grep <pid> / cgroup / cpuset / app1 / task
c4f4t0r

Risposte:


16

Utilizzando systemd (PID 3378 per esempio):

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

Utilizzando 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

Guardando in / 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'ultimo comando corrisponderebbe anche ai dati sul processo il cui pid è 13378, o 23378, o 33378, ecc.
Patrick Mevzek,

8

Il modo più rapido per visualizzare il cgroup di un processo è in base al nome del processo, usando questo script bash:

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

4
usare pgrep, nonps | grep | awk
Patrick

4

Da RHEL7 in poi, e su alcune altre distro, trovo utile questo util:

$ systemd-cgtop

Prima di usarlo, assicurati di averlo DefaultCPUAccounting=yesinserito /etc/systemd/system.conf.

Ho anche apportato alcuni miglioramenti alla sceneggiatura di Egbert che è ancora utile e ho usato il suggerimento di Patrick per usare 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.