如何找出特定进程的cgroup?


18

有什么方法可以cgroup处理吗?

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


10
试试ps -o cgroup <pid>
Matthew Ife 2013年

5
cat / proc / <pid> / cgroup
c4f4t0r 2013年

@MIfe,是的,非常正确。这就是我需要的
zerospiel 2013年

@ c4f4t0r,您的方法不是很好,它只是向我输出所有可用的控制器,但不输出进程的cgroup,但也会给您带来麻烦。
zerospiel 2013年

@MIfe是正确的,很抱歉,其他选项是任务文件上的grep,例如grep <pid> / cgroup / cpuset / app1 / tasks
c4f4t0r

Answers:


16

使用systemd(例如PID 3378):

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

使用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

查看/ 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

最后一个命令将匹配为约进程,其PID是很好的数据13378,或者23378,或者33378,等
帕特里克Mevzek

8

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

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

4
使用pgrep,而不是ps | grep | awk
Patrick

4

从RHEL7起,在其他发行版中,我发现此实用程序很有帮助:

$ systemd-cgtop

使用它之前,请确保您已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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.