问题标签 [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.
docker - Docker 容器如何判断其内存是否受限?
我在cgget -n --values-only --variable memory.limit_in_bytes /
Docker 容器内使用,以查看允许使用多少内存docker run --memory=X
。9223372036854771712
但是,我需要知道内存是否完全受到限制,上面的命令没有回答,因为在这种情况下(在我的测试中)它只会给我一个很大的数字。
那么,有什么方法可以判断内存是否是有限的呢?我正在寻找不涉及docker run
以特殊方式运行的解决方案,例如从主机(例如,/var/...
)挂载文件或传递环境变量。
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:
What is the difference between a namespace and a cgroup? What are the different use cases they address?
What has docker implemented on top this these to gain popularity ?
I would like to know the internals of these features and how they are implemented.
systemd - 在运行 systemd 的系统中使用自定义 cgroup 管理资源分配
我有一个以用户“foo”身份运行的应用程序。我想设置此应用程序在运行时可以使用的 CPU 和内存的限制。我无法意识到如何使用诸如“systemctl”和“set-property”之类的systemd工具来实现这一点,因为该应用程序不是服务,而是用户可以选择和启动的应用程序。
有人可以提供任何指导吗?
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
:
总内存是 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!
linux - 使用cgroups限制cpu使用的正确方法
我按照红帽文档使用命令为三个用户创建三个组:
假设用户 A、B、C 分别属于组 1、2、3。
但是使用这种方法,A可以修改cpu.shares文件以设置一个非常大的数字,这样他就可以从B和C那里获得更多的cpu份额。我认为这不是创建组的正确方法,有什么建议吗?
此外,即使创建了组,如果任何用户在不使用 cgexec 的情况下运行他们的进程,限制会失败吗?系统会将这些进程放到任何组(可能是默认组)吗?如果是这样,默认组的行为是什么?
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 更改。
linux - 如何在 linux 中禁用 oom 杀手?
我目前的配置是:
但是当我运行一项任务时,它无论如何都会被杀死。
更新
我的任务用于科学计算,耗费大量内存,看来这overcommit_memory=1
可能是最好的选择。
更新 2
实际上,我正在做一个数据分析项目,它消耗的内存超过16G
,但我被要求将它们限制在大约5G
. 这个需求可能无法通过程序本身的优化来实现,因为该项目使用了很多子命令,而且大多数子命令都没有像Java 中的Xms
or那样的选项。Xmx
更新 3
我的项目应该是一个过度使用的系统。正如a3f所说,似乎我的应用程序更喜欢xmalloc
在分配内存失败时崩溃。
我不想投降,虽然这么多可怕的考验让我筋疲力尽。所以请告诉我一条通往光明的路;)
linux - 获取有关 cgroup 进程更改的通知?
基本上,通常用于通知文件系统更改的 inotify 在 cgroup 虚拟文件系统中不起作用。
本质上,我想要一种在 cgroup 中的进程死亡或分叉时获得类似于 inotify 的通知的方法。我尝试将 inotify 附加到tasks
cgroup 文件系统内的虚拟文件,但是当进程自行分叉时,只有当使用空间工具实际手动写入它以影响 cgroup 时,它才会执行任何操作。
cgroups - 尝试将进程添加到 cgroup 时出现“组的 cgroup 更改失败”
我在安装了 libcgroup 的Ubuntu 14和SUSE 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 更改组失败
为什么会这样?谢谢!
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 凭据——我讨厌这样没有问过别人是徒劳的。