Como descobrir o cgroup de um processo específico?

17

Existe algum método para obter o cgroupprocesso?

O único pacote que eu conheço ( cgroup-bin), apenas fornece algumas manipulações ao cgroups e permite alterar o cgroup de processo / lista de processos, mas não há recursos para saber informações sobre o cgroup de um processo específico.

zerospiel
fonte
9
Tenteps -o cgroup <pid>
Matthew Ife
5
Você pode
usar o seguinte comando
@ Safe, sim, você está certo, ty muito. Isto é o que eu preciso
zerospiel
@ c4f4t0r, seu método não é tão bom, apenas gera para mim todos os controladores disponíveis, mas não o cgroup de um processo, mas você também.
Zerospiel
@MIfe isso é verdade, desculpe, outra opção é grep no arquivo de tarefas, por exemplo grep <pid> / cgroup / cpuset / app1 / tarefas
c4f4t0r

Respostas:

15

Usando systemd (PID 3378, por exemplo):

# 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

Procurando em / 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
fonte
O último comando também corresponderia aos dados do processo cujo pid é 13378, ou 23378, ou 33378, etc.
Patrick Mevzek 15/01
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
John Greene
fonte
4
usar pgrep, nãops | grep | awk
Patrick
4

A partir do RHEL7 e acima, e em outras distros, acho este utilitário útil:

$ systemd-cgtop

Antes de usá-lo, certifique-se que você tem DefaultCPUAccounting=yesem /etc/systemd/system.conf.

Até fiz algumas melhorias no script de Egbert que ainda são úteis e usei a sugestão 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
fonte