问题

问题

问题

我目前正在尝试限制 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.confand cgconfig.confin/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?

我还看到在线论坛使用cgredon systemd,但在安装这 3 个时,它似乎没有为我安装apt-get

/etc$ which cgred
/etc$ sudo service cgred start
cgred: unrecognized service

任何建议将不胜感激。

相关内容