Questions tagged «cgroups»

Linux cgroup(控制组)允许限制和考虑系统上的资源,包括CPU,内存和块I / O。

1
如何使用cgroup将除白名单以外的所有进程限制为单个CPU?
Red Hat有一个关于cgroups的指南,可能对您有所帮助(但不能回答这个问题)。 我知道如何在启动该进程的命令期间通过以下方式将特定进程限制为特定的CPU: 首先,将以下*放入/etc/cgconfig.conf: mount { cpuset = /cgroup/cpuset; cpu = /cgroup/cpu; cpuacct = /cgroup/cpuacct; memory = /cgroup/memory; devices = /cgroup/devices; freezer = /cgroup/freezer; net_cls = /cgroup/net_cls; blkio = /cgroup/blkio; } group cpu0only { cpuset { cpuset.cpus = 0; cpuset.mems = 0; } } 然后启动一个进程,并使用以下命令将其专门分配给该cgroup: cgexec -g cpuset:cpu0only myprocessname 我可以通过以下方式自动限制特定进程名称的所有实例(我认为这是正确的)/etc/cgrules.conf: …

4
最简单的安全沙箱(需要有限的资源)
我正在执行一个实现分布式模拟的项目:在多个节点上执行任意代码,然后收集并汇总结果。 每个节点都是Ubuntu Linux虚拟机的一个实例,并运行一个主进程,该进程负责将要执行的代码转发给多个工作进程(每个内核1个)。 这个问题是关于如何确保每个工作程序在沙盒环境中运行,而又不对每个工作程序使用虚拟机实例。对工人的确切要求是: fs:没有写权限,只读权限仅限于一个目录(和子文件夹) net:仅允许本地通信(IPC,TCP等) mem:限制内存使用量(无交换内存),如果超过mem限制则终止 cpu:仅允许1个内核,如果超过时间限制则终止 不应施加其他限制:工作者应该能够加载动态库(从只读文件夹),生成新线程或进程,调用系统函数,ecc ecc,但限制必须由生成/加载的实体继承,并且应该以总和的方式应用(例如,我们不能让一个工作器产生两个各自使用800MB的线程,则该工作器的内存限制为1GB)。 毋庸置疑,工人没有权利提高自己的权利。 我花了相当多的时间来审查可用的替代方案(SELinux,AppArmor,cgroups,ulimit,Linux名称空间,LXC,Docker等),以找到满足我的要求的最简单的解决方案,但是我在该领域的经验有限。 当前的理解:在我的用例中,LXC和Docker有点沉重,并不完全安全1。由于易于配置,AppArmor优于SELinux,可将其用于fs和网络限制;cgroups比ulimit(在单个进程上运行)更可取,将其用于mem和cpu限制。 这是实现我的目标的最简单方法吗?我可以单独使用AppArmor还是cgroup?我的模型中是否存在明显的安全漏洞?指导方针应该是“允许工人放下自己,但别无其他”。


3
如何使用systemd创建用户cgroup
我在中使用非特权lxc容器Arch Linux。以下是基本的系统信息: [chb@conventiont ~]$ uname -a Linux conventiont 3.17.4-Chb #1 SMP PREEMPT Fri Nov 28 12:39:54 UTC 2014 x86_64 GNU/Linux 这是一个具有以下内容的自定义/编译内核user namespace enabled: [chb@conventiont ~]$ lxc-checkconfig --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled …

2
基于权重的VM块IO控制
我使用KVM管理我的虚拟机。我试图限制为VM提供的资源。我可以使用libvirt / cgroups限制为VM分配的CPU和内存。现在,我想通过应用一些权重来控制为每个VM分配的磁盘时间。我从cgroups看了blkio控制。由于VM只是一个Linux进程,因此我将能够使用cgroups,但是我不确定它是否也适用于异步IO。如果没有,有人可以提出一个好的替代解决方案吗?

1
使用Linux cgroup平衡CPU性能
我安装了两个使用带有相对较新内核的Linux cgroup的双核Linux系统。一个正在运行Debian Squeeze,另一个正在运行Ubuntu 11.04 Natty Narwhal。尽管Debian系统的内核较旧,但我在cgroups上的CPU负载平衡要好一些,因此可以达到CPU负载平衡。但这并不适合所有情况,而我要问的是,这两个系统上都有特定的怪异之处。 如果您阅读带有控制组的Linux中的资源管理,则将提供一个示例,说明如何重现该问题。这是Ubuntu版本(以root身份运行): cd /sys/fs/cgroup/cpu [On Debian Squeeze start at /mnt/cgroups/cpu instead] mkdir low high echo 512 > low/cpu.shares echo 2048 > high/cpu.shares yes low > /dev/null & echo $! > low/tasks yes high > /dev/null & echo $! > high/tasks ps -C yes -opid,%cpu,psr,args [repeat …

1
cgroup如何与非cgroup进程交互?
我在一台核心机器上有3个进程。每个进程都完全相同,并尽可能快地刻录CPU(紧密循环)。其中的两个(A和B)与cgexec在单独的组中启动,并且共享设置为512和512。第三个(C)是定期启动的,而不与cgexec一起启动。 一旦一切就绪并运行,C即可获得66%的CPU A并B拆分33%。如果我杀了C,然后A和B获得各50%(预期)。 为什么C得到66%?在这种情况下,我希望每个人占33%,或者50%(C),25%(A)和25%(B)。C不管我怎么做数学,都会有66%的人无法解决问题。 总的来说,我想了解在资源共享(特别是CPU,但如果不太复杂的话,可以理解的话)下cgexec启动的进程如何与启动的进程进行交互cgexec。
12 cgroups 

4
管理cgroup是否需要root用户访问权限?
我正在尝试与两个不同操作系统(Ubuntu和CentOS)上的控制组一起工作。我想问的问题很少。 我正在尝试使用cgcreate命令创建一个控制组,并且它似乎需要在计算机上进行root访问。到目前为止,我所看到的所有示例都没有提到需要成为创建或修改控制组的root用户。 真的有必要成为root用户吗?最终目标是编写一个C ++应用程序,该应用程序使用libcgroup API创建和管理控制组以控制资源。但是C ++应用程序不会由任何root用户运行。它可以是任何普通用户。

2
无竞争的cpuset中的线程的调度程序优先级和策略有什么影响(如果有)?
我有一个Linux系统,其中我们已使用cgroups创建两个cpu_exclusive cpusets A和B,并且已将所有用户线程和所有未绑定的内核线程迁移到连接到cpuset A的cgroup。在cpuset A中运行的事物具有不同的调度程序策略和不同的优先级,并且cpuset A中运行的线程比cpuset A中的内核多。 还有一些非常活跃的进程连接到cpuset B,这些进程中的用户线程总数永远不会超过cpuset B中专有的核心数量。目标是屏蔽在cpuset中运行的这些重要任务B从机器上的其他活动中最小化处理延迟。 在这样的设置中,在cpuset B中运行的用户线程的调度策略/优先级是否具有可观察到的效果?换句话说:将B个cpuset线程的调度策略从默认的SCHED_OTHER更改为SCHED_FIFO或SCHED_RR是否会产生好的或坏的后果? 似乎答案应该是“否”,因为调度程序应该能够将在cpuset B中运行的每个线程分配给自己的专用内核,因此没有什么要进行优先级排序或调度的,因此B的策略和相对优先级cpuset线程无关紧要。另一方面,还有绑定内核线程和“调度程序域”方面需要担心的方面,可能还有其他我没有考虑的方面。 在实际意义上,在超额配置的独占cpuset中运行的线程的调度策略和优先级是否重要?

2
在OOM杀手/ cgroup杀死进程之前接收信号
在我们的集群中,我们正在限制进程资源,例如内存(memory.limit_in_bytes)。 我认为,最后,这也可以通过Linux内核中的OOM杀手来处理(通过阅读源代码看起来很像)。 在我的进程被杀死之前,有什么方法可以发出信号吗?(就像SGE的-notify选项一样,该选项将在进程终止qsubSIGUSR1之前发送。) 我在/dev/mem_notify 这里了解到有关信息,但我没有它-如今还有其他东西吗?我也读了这篇似乎有些相关的文章。 我希望至少能够转储一个小的堆栈跟踪信息以及其他一些有用的调试信息-但也许我甚至可以通过释放一些内存来恢复。 我当前正在使用的一种解决方法是这个小脚本,该脚本经常检查我是否接近极限(95%),如果是,它将发送过程a SIGUSR1。在Bash中,我将在后台(cgroup-mem-limit-watcher.py &)启动此脚本,以便它监视同一cgroup中的其他proc,并在父Bash进程终止时自动退出。

1
当podman从systemd启动时,为什么conmon在另一个cgroup中?
给定podman安装在linux系统和名为baz.service的systemd单元上: # /etc/systemd/system/baz.service [Service] ExecStart=/usr/bin/podman run --rm --tty --name baz alpine sh -c 'while true; do date; sleep 1; done' ExecStop=/usr/bin/podman stop baz 然后baz.service启动: # systemctl daemon-reload # systemctl start baz.service 然后,当我检查设备的状态时,在/system.slice/baz.service cgroup 中看不到shor sleep进程 # systemctl status baz ● baz.service Loaded: loaded (/etc/systemd/system/baz.service; static; vendor preset: enabl Active: active …

2
如何优雅地解决此内存问题?
我有一台带有交换分区的标准Linux(Debian测试)笔记本电脑。 我做了很多实验。其中一些确实非常消耗内存,Linux默认情况下的行为方式对我来说是个问题...让我们举一个愚蠢的例子: 坐在笔记本电脑前 打开一个终端 类型python,然后a = [0]*100000000 现在很有可能您没有足够的RAM来处理这个大列表。Linux将先填充RAM,然后进行交换,几分钟后,OOM杀手将被触发并杀死(几乎)随机服务,如果希望您在适当的时候按Ctrl + C python,并且如果终端仍然有重点,计算机将再次变得敏感。 我想强制执行一些内存限制,以避免不必要的交换,并拒绝给进程分配比我(在RAM中)更多的内存的权利。如果内存需求低于某个限制或由root要求,则只需杀死除root以外的任何用户最耗费内存的进程。 ulimit -Sv [mem] 我在后面听到! 呵呵!“ cgroups通过使用cgexec!” 有人在第一行说! 是的,您是对的:这些确实是非常好的解决方案。但: 它们不适用于整个系统 限制是按过程设置的 限制是静态的,不考虑可用RAM(AFAIK)的实际数量 这里和那里,他们说这些是不是真的很好地解决执行难的限制。 我想要的是内核说:“您属于用户foo(不是root),您使用了大量内存,而我们将用光内存。抱歉,老兄……现在就死了!” 或者:“您到底在干什么?您需要x MB,只有y MB可用。是的,SWAP是空的,但是您不打算使用SWAP来完成您的工作,是吗?不,我说不!你没有记忆!如果你坚持下去,你会死的!
10 memory  limit  cgroups  ulimit 

1
为所有具有systemd cgroups的用户设置默认资源限制
我可以为用户设置内存限制,如下所示: systemctl set-property user-UID.slice MemoryHigh=24G 有没有一种方法可以适用于所有用户?我希望每个用户获得24G,而不是所有用户进程总共获得24G(我认为这是user.slice直接将其设置为打开的结果)。

1
是否必须在每次引导时设置cgroup中的进程?如果是这样,如何坚持下去?
我正在阅读有关使用cgroup设置进程限制的问题的答案。给定的样本设置了流程的限制(在示例中,sshd)。在答案中,过程的PID是手动设置的。对于我的目的,这将是不可接受的,我希望从给定应用程序启动的进程始终设置限制,无论它们何时启动,也不受启动多少此类进程的限制。 也许从示例中尚不清楚这将如何发生,因此也欢迎提供清晰的解释或链接。内核cgroups.txt中的示例似乎使用与上面已经给出的模型相同的模型。

2
使用cgroup限制virtualbox的内存使用量
我正在尝试使用cgroup(控制组)限制virtualbox的内存使用量,但是它似乎无法正常工作。 我的机器是: $ uname -a Linux fc.bgi 2.6.40-4.fc15.i686 #1 SMP Fri Jul 29 18:54:39 UTC 2011 i686 i686 i386 GNU/Linux 我试图让它像这样工作: 在内存层次结构下创建新的cgroup: $ cgcreate -g memory:vbox 为vbox设置memory.limit_in_bytes: $ cgset -r memory.limit_in_bytes=512M vbox 将运行pid的vbox分组为vbox: $ cgclassify -g memory:vbox 20015 有人可以解释为什么这行不通吗?

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.