¿Cómo averiguar cgroup de un proceso particular?

18

¿Hay algún método para obtener el cgroupproceso?

El único paquete que conozco ( cgroup-bin), solo proporciona algunas manipulaciones con cgroups y permite cambiar cgroup de proceso / lista de procesos, pero no capacidades para conocer información sobre cgroup de un proceso en particular.

zerospiel
fuente
10
Pruebaps -o cgroup <pid>
Matthew Ife
55
cat / proc / <pid> / cgroup
c4f4t0r
@MIfe, sí, tienes razón, muchas gracias. Esto es lo que necesito
zerospiel
@ c4f4t0r, su método no es tan bueno, solo me muestra todos los controladores disponibles, pero no cgroup de un proceso, pero también usted.
zerospiel
@MIfe es cierto, lo siento, otra opción es grep en el archivo de tareas, por ejemplo grep <pid> / cgroup / cpuset / app1 /
task

Respuestas:

16

Usando systemd (PID 3378 por ejemplo):

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

Usando 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

Buscando en / 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
fuente
El último comando también coincidiría con los datos sobre el proceso cuyo pid es 13378, o 23378, o 33378etc.
Patrick Mevzek
8

La forma más rápida de ver cgroup de un proceso es por nombre de proceso, utilizando este script bash:

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

Desde RHEL7 en adelante, y en algunas otras distribuciones, encuentro útil esta utilidad:

$ systemd-cgtop

Antes de usarlo, asegúrese de que tiene DefaultCPUAccounting=yesen /etc/systemd/system.conf.

Incluso hice algunas mejoras en el script de Egbert que todavía son útiles y utilicé la sugerencia de Patrick para usar 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
fuente