问题
我目前正在尝试限制 AWS EC2 实例上特定用户的资源。在网上做了一些研究后,我认为以下足以将用户添加到限制内存的 cgroup 中:
$ sudo apt-get install cgroup-bin cgroup-lite libcgroup1
$ cgcreate -a root -t ray_zhang -g memory:limitgroup
cgcreate: can't create cgroup limitgroup: Cgroup, operation not allowed
我搜索了错误消息,但找不到任何实质性内容。我正在运行root
,并且我试图限制用户ray_zhang
使用 100% 内存。
我也尝试修改cgrules.conf
and cgconfig.conf
in/etc
但无法观察到内存限制。我做了以下事情:
/etc$ cat cgrules.conf
ray_zhang memory memlimit/
/etc$ cat cgconfig.conf
group memlimit {
memory {
memory.limit_in_bytes = 1024m;
}
}
为了测试我做了以下操作(在用户中ray_zhang
通过sudo su ray_zhang
):
$ python
Python 2.7.12 (default, Jul 18 2016, 15:02:52)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x = ' '*3000000000
在 htop 上,我看到它使用了大约 3GB 的 RAM,这意味着 1024m 的限制没有得到遵守。
尝试
另一种尝试是使用这个答案 。按照说明并运行相同的 python 测试,内存再次不受限制,我在以下位置观察到:
$ cat /var/log/cgrulesengd.log | grep python
Cgroup change for PID: 22745, UID: 16975, GID: 996, PROCNAME: /usr/bin/python2.7 FAILED! (Error Code: 50002)
环境
我正在运行一个相当旧的 debian 操作系统版本:
/etc$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
/etc$ uname -a
Linux <redacted> 4.4.0-154-generic #181~14.04.1-Ubuntu SMP Tue Jun 25 16:40:28 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
但我也尝试在该实例内使用 Ubuntu 18.04 的 docker 容器中执行此操作,但仍然失败并出现相同的Cgroup, operation not allowed
错误。
额外的
我的怀疑之一是虚拟化环境中的 cgroup 存在问题。由于我在 EC2 中运行,这意味着我可能在虚拟机或容器内操作。也许这会阻止我使用 cgroups?
我还看到在线论坛使用cgred
on systemd
,但在安装这 3 个时,它似乎没有为我安装apt-get
:
/etc$ which cgred
/etc$ sudo service cgred start
cgred: unrecognized service
任何建议将不胜感激。