如何找出特定进程的cgroup?

zer*_*iel 22 linux process cgroup

有什么方法可以得到cgroup进程吗?

我所知道的唯一一个包 ( cgroup-bin),只提供了一些对 cgroup 的操作,并允许更改进程的 cgroup/进程列表,但没有能力了解有关特定进程的 cgroup 的信息。

Rfr*_*ile 22

使用 systemd(例如 PID 3378):

# systemctl status 3378 | grep CGroup
CGroup: /user.slice/user-1000.slice/session-3.scope
Run Code Online (Sandbox Code Playgroud)

使用过程:

# 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
Run Code Online (Sandbox Code Playgroud)

查看/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
Run Code Online (Sandbox Code Playgroud)


Joh*_*ene 8

查看进程的 cgroup 的最快方法是通过进程名称,使用以下 bash 脚本:

#!/bin/bash
THISPID=`ps -eo pid,comm | grep $1 | awk '{print $1}'`
cat /proc/$THISPID/cgroup
Run Code Online (Sandbox Code Playgroud)

  • 使用`pgrep`,而不是`ps | | | awk` (5认同)

小智 6

从 RHEL7 及更高版本,以及在其他一些发行版上,我发现这个实用程序很有帮助:

$ systemd-cgtop
Run Code Online (Sandbox Code Playgroud)

在使用它之前,请确保您DefaultCPUAccounting=yes/etc/systemd/system.conf.

我什至对 Egbert 的脚本进行了一些改进,这些改进仍然有用,并使用了 Patrick 的建议来使用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
Run Code Online (Sandbox Code Playgroud)