以systemd-cgls的层次结构为例:
└─user.slice ├─user-1000.slice │ ├─[email protected] │ │ └─init.scope │ │ ├─3262 /lib/systemd/systemd --user │ │ └─3263 (sd-pam) │ └─session-3.scope │ ├─3260 sshd: user1 [priv] │ ├─3362 sshd: user1@pts/1 │ ├─3363 -bash │ └─3378 ssh-agent -s └─user-0.slice ├─session-1.scope │ ├─3151 sshd: root@pts/0 │ ├─3252 -bash │ ├─3625 systemd-cgls
如果我设置了user.slice的限制,例如5M的内存,Memory行清楚地报告它:
systemctl status user.slice ● user.slice Loaded: loaded (/etc/systemd/system/user.slice; static; vendor preset: enabled) Active: active since Mon 2016-08-22 11:32:13 CEST; 52min ago Tasks: 12 Memory: 3.1M (limit: 5.0M) CPU: 1.275s CGroup: /user.slice ...
用户1000切片有应用限制,如果我用这个用户强调系统,我可以看到它。 但状态不报告在这个孩子片的限制:
systemctl status user-1000.slice ● user-1000.slice - User Slice of user1 Loaded: loaded (/run/systemd/transient/user-1000.slice; transient; vendor preset: enabled) Transient: yes Active: active since Mon 2016-08-22 11:32:42 CEST; 1h 8min ago Tasks: 6 (limit: 12288) Memory: 856.0K CPU: 521ms
按照proc的方式,我可以看到user-1000进程属于用户片:
# cat /proc/3260/cgroup 10:memory:/user.slice/user-1000.slice ...
并直接在/ sys /中检查:
root@server1:/sys/fs/cgroup/memory/user.slice# cat memory.limit_in_bytes 5242880 root@server1:/sys/fs/cgroup/memory/user.slice# cd user-1000.slice/ root@server1:/sys/fs/cgroup/memory/user.slice/user-1000.slice# cat memory.limit_in_bytes 9223372036854771712
如何知道subprocess/切片是否在父cgroup中定义了一个限制?