问题标签 [cgroups]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3321 浏览

docker - Docker 容器如何判断其内存是否受限?

我在cgget -n --values-only --variable memory.limit_in_bytes /Docker 容器内使用,以查看允许使用多少内存docker run --memory=X9223372036854771712但是,我需要知道内存是否完全受到限制,上面的命令没有回答,因为在这种情况下(在我的测试中)它只会给我一个很大的数字。

那么,有什么方法可以判断内存是否是有限的呢?我正在寻找不涉及docker run以特殊方式运行的解决方案,例如从主机(例如,/var/...)挂载文件或传递环境变量。

0 投票
3 回答
34800 浏览

linux - difference between cgroups and namespaces

I recently started learning docker and it seems that most of the heavy lifting is done by the Linux kernel, using namespaces and cgroups.

A few things which I am finding confusing are:

  1. What is the difference between a namespace and a cgroup? What are the different use cases they address?

  2. What has docker implemented on top this these to gain popularity ?

  3. I would like to know the internals of these features and how they are implemented.

0 投票
2 回答
562 浏览

systemd - 在运行 systemd 的系统中使用自定义 cgroup 管理资源分配

我有一个以用户“foo”身份运行的应用程序。我想设置此应用程序在运行时可以使用的 CPU 和内存的限制。我无法意识到如何使用诸如“systemctl”和“set-property”之类的systemd工具来实现这一点,因为该应用程序不是服务,而是用户可以选择和启动的应用程序。
有人可以提供任何指导吗?

0 投票
2 回答
7107 浏览

docker - 为 Kubernetes 中的 Pod 分配或限制资源?

Pod 的资源限制设置为:

并且10G节点上还剩下内存。

我已经5在短时间内成功创建了 pod,并且该节点可能还剩下一些内存,例如8G.

随着时间的推移,mem 的使用量越来越大,达到限制(5G x 5 = 25G > 10G),则节点将失去响应。

为了保证可用性,有没有办法在节点上设置资源限制?

更新

核心问题是 pod 内存使用并不总是等于限制,尤其是在刚启动的时候。因此可以尽快创建无限的 pod,然后使所有节点满载。这不好。可能有一些东西可以分配资源而不是设置限制。

更新 2

我再次测试了限制和资源:

总mem是15G,剩下14G,但是调度成功了3个pod:

看来节点快要被碾压了XD

更新 3

现在我更改资源限制、请求5G和限制8G

结果是: 在此处输入图像描述

根据关于资源检查的k8s源代码

在此处输入图像描述

总内存是 only 15G,并且所有的 pod 都需要24G,所以所有的 pod 都可能被杀死。16G(如果没有限制,我的单个容器将比通常花费更多。)

这意味着您最好保持requests 完全等于limits以避免 pod 被杀死或节点崩溃。好像requests没有指定值一样,它会被设置limit为默认值,那么究竟是做什么requests用的呢?我认为只有limits完全够用,或者IMO,与K8s声称的相反,我宁愿将资源请求设置为大于限制,以确保节点的可用性。

更新 4

Kubernetes 1.1通过以下公式安排 pod 内存请求:

(capacity - memoryRequested) >= podRequest.memory

似乎 kubernetes 并不像Vishnu Kannan所说的那样关心内存使用情况。因此,如果 mem 被其他应用程序大量使用,该节点将被粉碎。

幸运的是,从提交e64fe822 开始,公式已更改为:

(allocatable - memoryRequested) >= podRequest.memory

等待k8s v1.2!

0 投票
0 回答
328 浏览

linux - 使用cgroups限制cpu使用的正确方法

我按照红帽文档使用命令为三个用户创建三个组:

假设用户 A、B、C 分别属于组 1、2、3。

但是使用这种方法,A可以修改cpu.shares文件以设置一个非常大的数字,这样他就可以从B和C那里获得更多的cpu份额。我认为这不是创建组的正确方法,有什么建议吗?

此外,即使创建了组,如果任何用户在不使用 cgexec 的情况下运行他们的进程,限制会失败吗?系统会将这些进程放到任何组(可能是默认组)吗?如果是这样,默认组的行为是什么?

0 投票
1 回答
473 浏览

dbus - systemd 资源控制 SetProperties 在运行时使用 gdbus

我有一个foo.slice带有 cgroup 设置的 systemd CPUShares。我的想法是在系统启动期间的某个时刻更改设置,这将由 systemd 服务触发。

我做了一些测试工作来检查如何在运行时更改设置。

foo.slice我定义的CPUShares=256. 这会导致cat /sys/fs/cgroup/cpu/foo.slice/cpu.shares 256.

并会得到以下几行gdbus introspect

我尝试CPUShares通过调用方法来更改:

使用:

我会得到

但我还是得到了cat /sys/fs/cgroup/cpu/foo.slice/cpu.shares 256

重新启动切片后:

我会得到 cat /sys/fs/cgroup/cpu/foo.slice/cpu.shares 2048

我用systemd 211.

我希望了解有关此行为的更多详细信息,或者是否有更好的解决方案,即希望获得一些提示以CPUShares在运行时使用 systemd 更改。

0 投票
2 回答
21503 浏览

linux - 如何在 linux 中禁用 oom 杀手?

我目前的配置是:

但是当我运行一项任务时,它无论如何都会被杀死。

更新

我的任务用于科学计算,耗费大量内存,看来这overcommit_memory=1可能是最好的选择。

更新 2

实际上,我正在做一个数据分析项目,它消耗的内存超过16G,但我被要求将它们限制在大约5G. 这个需求可能无法通过程序本身的优化来实现,因为该项目使用了很多子命令,而且大多数子命令都没有像Java 中的Xmsor那样的选项。Xmx

更新 3

我的项目应该是一个过度使用的系统。正如a3f所说,似乎我的应用程序更喜欢xmalloc在分配内存失败时崩溃。

我不想投降,虽然这么多可怕的考验让我筋疲力尽。所以请告诉我一条通往光明的路;)

0 投票
1 回答
1243 浏览

linux - 获取有关 cgroup 进程更改的通知?

基本上,通常用于通知文件系统更改的 inotify 在 cgroup 虚拟文件系统中不起作用。

本质上,我想要一种在 cgroup 中的进程死亡或分叉时获得类似于 inotify 的通知的方法。我尝试将 inotify 附加到taskscgroup 文件系统内的虚拟文件,但是当进程自行分叉时,只有当使用空间工具实际手动写入它以影响 cgroup 时,它才会执行任何操作。

0 投票
2 回答
5352 浏览

cgroups - 尝试将进程添加到 cgroup 时出现“组的 cgroup 更改失败”

我在安装了 libcgroup 的Ubuntu 14SUSE Linux Enterprise Server 11 (x86_64)上使用 root 执行了以下操作:

cgcreate -t​​ ngam:home -a ngam:home -g cpuset:/nadav2ndCpuSet

cgset -r cpuset.cpus=1 nadav2ndCpuSet

之后,如果你 cat /sys/fs/cgroup/cpuset/nadav2ndCpuSet/cpuset.cpus,你会得到: 1

这很好!因为它应该工作。

然后,从用户ngam运行以下 cmd:

cgexec -g cpuset:nadav2ndCpuSet ~/whileLoop

其中whileLoop只是一个简单的程序,它在执行 sqrt 的循环中运行。

之后,我收到以下错误消息:

cgroup 更改组失败

为什么会这样?谢谢!

0 投票
1 回答
260 浏览

apache-spark - 将 cgroup 用于 Spark 时 Mesos 的行为

我想知道当启用 cgroup 时,在 Mesos 上细粒度模式下 Spark 的行为会是什么。

一个问题如下:当我在没有 cgroups 的情况下使用 Mesos+spark 时,它已经表明实际的 spark 执行器进程使用的内存至少比它向 Mesos 承诺的要多使用 10%。启用 cgroups 时,它会杀死 Spark-executors 吗?

其次,文件缓存是如何处理的?Spark 严重依赖文件缓存。文件缓存是否计入 Mesos 中的内存量?可能不会,但我们能影响这个吗?例如,理想情况下,我希望 Spark 总共使用 8GB,其中 5GB 应该用于 java 进程——假设 spark 运行良好并且不会增长超过 5GB——并且应该使用 3GB 作为文件缓存(最大)。

我希望有人有这方面的经验,因为为了自己测试这些东西,我必须通过集群系统管理员的大量支持请求,因为 cgroups 在某一时刻依赖于 root 凭据——我讨厌这样没有问过别人是徒劳的。