![c8e711d2c3dfc249d155d0333431221b.gif](https://img-blog.csdnimg.cn/img_convert/c8e711d2c3dfc249d155d0333431221b.gif)
上篇文章主要介绍了 cgroup 的一些基本概念,包括其在 CentOS
系统中的默认设置和控制工具,并以 CPU 为例阐述 cgroup 如何对资源进行控制。这篇文章将会通过具体的示例来演示如何通过 cgroup 来限制 CPU
的使用以及不同的 cgroup 设置对性能的影响。
1. 查看当前 cgroup 信息
有两种方法来查看系统的当前 cgroup 信息。第一种方法是通过 systemd-cgls
命令来查看,它会返回系统的整体 cgroup 层级,cgroup 树的最高层由 slice
构成,如下所示:
$ systemd-cgls --no-page
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
├─user.slice
│ ├─user-1000.slice
│ │ └─session-11.scope
│ │ ├─9507 sshd: tom [priv]
│ │ ├─9509 sshd: tom@pts/3
│ │ └─9510 -bash
│ └─user-0.slice
│ └─session-1.scope
│ ├─ 6239 sshd: root@pts/0
│ ├─ 6241 -zsh
│ └─11537 systemd-cgls --no-page
└─system.slice
├─rsyslog.service
│ └─5831 /usr/sbin/rsyslogd -n
├─sshd.service
│ └─5828 /usr/sbin/sshd -D
├─tuned.service
│ └─5827 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
├─crond.service
│ └─5546 /usr/sbin/crond -n
可以看到系统 cgroup 层级的最高层由 user.slice
和 system.slice
组成。因为系统中没有运行虚拟机和容器,所以没有 machine.slice
,所以当 CPU 繁忙时,user.slice
和 system.slice
会各获得 50%
的 CPU 使用时间。
user.slice 下面有两个子 slice:user-1000.slice
和 user-0.slice
,每个子 slice 都用 User ID (UID
) 来命名,因此我们很容易识别出哪个 slice 属于哪个用户。例如:从上面的输出信息中可以看出 user-1000.slice
属于用户 tom,user-0.slice
属于用户 root。
systemd-cgls
命令提供的只是 cgroup 层级的静态信息快照,要想查看 cgroup 层级的动态信息,可以通过 systemd-cgtop
命令查看:
$ systemd-cgtop
Path Tasks %CPU Memory Input/s Output/s
/ 161 1.2 161.0M - -
/system.slice - 0.1 - - -
/system.slice/vmtoolsd.service 1 0.1 - - -
/system.slice/tuned.service 1 0.0 - - -
/system.slice/rsyslog.service