Como descobrir o cgroup de um processo particular?

11

Existe algum método para obter cgroup do processo?

O único pacote que eu conheço ( cgroup-bin ), apenas forneço algumas manipulações com cgroups e permito mudar o cgroup do processo / lista de processos, mas nenhuma capacidade de saber informações sobre o cgroup de um processo particular.

    
por zerospiel 09.12.2013 / 21:43

3 respostas

8

A maneira mais rápida de visualizar o cgroup de um processo é pelo nome do processo, usando este script bash:

#!/bin/bash
THISPID='ps -eo pid,comm | grep $1 | awk '{print $1}''
cat /proc/$THISPID/cgroup
    
por 07.02.2015 / 00:24
8

Usando o systemd (PID 3378 por exemplo):

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

Usando o 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

Olhando para / 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
    
por 22.08.2016 / 14:06
3

A partir do RHEL7 e acima, e em alguns outros ditros, acho esse util útil:

systemd-cgtop

Antes de usá-lo, verifique se você tem DefaultCPUAccounting=yes em /etc/systemd/system.conf

Eu até fiz algumas melhorias no script do Egbert que ainda é útil e usei a sugestão do Patrick para usar o 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
    
por 28.02.2018 / 07:30