Tag: cgroups

能够比docker构buildmem_limit更多的malloc

我试图限制我的容器,以便它不占用主机上的所有RAM。 从Docker文档我明白, –memory限制了内存和–memory-swap限制(内存+交换)。 从mem_limit -compose文档看来,它们的条款是mem_limit和memswap_limit ,所以我构build了以下memswap_limit -compose文件: > cat docker-compose.yml version: "2" services: stress: image: progrium/stress command: '-m 1 –vm-bytes 15G –vm-hang 0 –timeout 10s' mem_limit: 1g memswap_limit: 2g progrium /压力图像只是运行的stress ,在这种情况下产生一个单线程请求15GB的RAM并保持10秒。 我预计这会崩溃,自15> 2。 (如果我要求比主机更多的内存,它会崩溃。) 内核启用了cgroups, docker stats显示这个限制正在被识别: > docker stats CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS […]

读取cgroups数据而不用挂载它

我有一些cgroupspipe理的服务(实际上在docker中运行)。 为了公平地调度一些资源要求较高的任务,集装箱化的服务需要知道它(尽可能)的资源使用情况。 我决定从cgroups读取这个指标。 但有一个问题。 我知道有两种方法从Docker容器中访问cgroup数据。 直接从容器内部挂载cgroups。 要做到这一点,我需要CAP_SYS_ADMINfunction容器。 我认为这太辛苦了,只能阅读资源使用指标。 使用docker卷,指向主机cgroups挂载点。 这个解决scheme或多或less是合适的,但我正在寻找更优雅的方式。 我不是一个“内核人员”,不熟悉内核源码和文档,所以我可以问noob的问题。 有没有任何内核接口,允许我读取cgroups指标而无需挂载cgroups文件系统?

docker工人更新后不工作

我更新了Fedora服务器23到Fedora服务器25.一切工作正常execpt泊坞窗。 这很不好,因为我现在有大约28个容器。 我发现它可能是SystemD的问题,以及cgroups文件系统如何挂载。 所以我补充说 GRUB_CMDLINE_LINUX="systemd.legacy_systemd_cgroup_controller=yes" 但它仍然没有工作。 在我的系统日志文件中,我可以看到更多的错误 Jan 30 08:23:50 kindred.one systemd[1]: libcontainer-7475-systemd-test-default-dependencies.scope: Scope has no PIDs. Refusing. Jan 30 08:23:50 kindred.one systemd[1]: libcontainer-7475-systemd-test-default-dependencies.scope: Scope has no PIDs. Refusing. 但我还没有发现任何有关这个错误的有用的。 这是我在terminal上的错误。 /usr/bin/docker-current: Error response from daemon: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"process_linux.go:334: running prestart hook 1 caused \\\"error […]

Kubelet无法获取“/system.slice/docker.service”的cgroup统计信息

题 实际上,kubectl(1.8.3在CentOS 7上)错误的按摩手段和如何解决。 Nov 19 22:32:24 master kubelet [4425]:E1119 22:32:24.269786 4425 summary.go:92]无法获取系统容器统计信息 “/system.slice/kubelet.service”:未能获得“/system.slice/kubelet.service”的cgroup统计信息:未能获得con 11月19日22:32:24 master kubelet [4425]:E1119 22:32:24.269802 4425 summary.go:92]无法获得系统容器统计信息“/system.slice/docker.service”:无法获取cgroup统计信息“/system.slice/docker.service”:未能获得联系 研究 发现相同的错误,并通过更新kubelet的服务单元,如下所示,但没有奏效。 kubelet无法获得docker和kubelet服务的cgroup统计信息 /etc/systemd/system/kubelet.service [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=http://kubernetes.io/docs/ [Service] ExecStart=/usr/bin/kubelet –runtime-cgroups=/systemd/system.slice –kubelet-cgroups=/systemd/system.slice Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target 背景 通过安装kubeadm来设置Kubernetes集群。 安装Docker文档中的部分说明了如何alignmentcgroup驱动程序。 注意:确保kubelet使用的cgroup驱动程序与Docker使用的相同。 为了确保兼容性,您可以更新Docker,如下所示: cat << EOF > /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] } EOF […]

Docker CPU百分比

有什么办法,我可以得到docker容器内的CPU的百分比,而不是在它之外? docker stats DOCKER_ID显示正是我需要的百分比,但我需要它作为variables。 我需要在容器内部获得cpu的百分比,并对其进行一些操作。 我已经看过不同的东西,如cgroup和dockerrestAPI,但他们不提供CPU百分比。 如果有一种方法可以获得容器内的cpu百分比,而不是外部的将是完美的。 我在下面的链接中find了一个由某人提供的解决scheme,这个解决scheme仍然在其他api的容器之外,但是我没有真正知道如何计算百分比。 获取Docker容器CPU使用率作为百分比

什么是Debian上的root cgroup进程行为?

我正在调查docker如何与Debian上的主机操作系统共享资源。 在Docker外部运行的进程将在根cgroup中运行。 所以归结为根cgroup和docker父cgroup“docker”之间的资源共享。 对于红帽子,这里的行为是: https : //access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/process_behavior.html 然而,在使用Debian进行testing时,我没有看到这种行为。 当我在根cgroup下运行多个进程时,我看到以下内容: 1每个cgroup中的进程: /rootgroup/ 1 process: 50% /rootgroup/docker/ 1 process: 50% 2根cgroup中的进程: /rootgroup/ 2 processes: 25% + 25% /rootgroup/docker/ 1 process: 50% 我无法find任何文件,这为Debian奠定了这种行为。 我看到正确的行为? 为什么与Red Hat有所不同呢?

在Docker容器中调整subprocess的OOM杀手

请帮助find合适的解决scheme。 在Ubuntu环境中运行的是一个java服务,它周期性地用params(同一个程序的多个实例)调用外部进程。 所有东西都打包到Docker容器中(内存限制设置为非特权,除了tmp和日志以外,只读属性,cap_drop全部)。 有时,提供给subprocess的数据会使其溢出内存限制。 所以,在这种情况下,我们希望杀死由于OOM造成的subprocess,但离开父进程(java)进程运行。 如果谈到非docker系统,有一套方法可以实现这一点,如:创build一个自定义cgroup,设置内存限制,并附加subprocess。 另一种方法是调整/ proc / PID / oom_adj设置使subprocess有更大的oom_score。 但是在docker容器中,我找不到一种简单的方法,无需在特权模式下运行容器,并将外部包装添加到主进程中。 有没有一种本地的方式来添加容器内的内存cgroup或调整OOM杀手? 提前致谢!

写入cgroup参数cpu.rt_runtime_us时出错

我正在尝试修改cgroup中的docker容器进程的实时运行时参数。 我正在学习本教程: http : //www.breakage.org/2014/08/22/using-sched_fifo-in-docker-containers-on-rhel/ 有时,写入docker- [ID] .scope文件的工作。 有时会返回以下错误:echo:write error:无效的参数 我试图理解为什么发生这种情况。 是否有某种最大限度的发挥作用? 更一般地说,是否有办法将进程configuration在根cgroup或不同的cgroup中,以确保此操作能够成功,或至less对于成功或失败原因有意义? 编辑:Centos 7.0.1406 Linux内核3.10.0-123.el7.x86_64 编辑:我正在运行多个容器,并尝试在其中几个(4-5)完成相同的目标

为Kubernetes中的窗格分配或限制资源?

Pod的资源限制设置为: resource limit cpu: 500m memory: 5Gi 在节点上剩下10G mem。 我已经在短时间内成功创build了5豆荚,并且该节点可能还有一些mem,例如8G 。 内存使用量随着时间的推移而增长,达到极限( 5G x 5 = 25G > 10G ),则节点将失去响应。 为了保证可用性,有没有办法在节点上设置资源限制? 更新 核心问题是pod内存的使用并不总是等于极限,特别是在刚启动的时候。 所以可以尽快创build无限的豆荚,然后使所有的节点满载。 这不好。 有可能是分配资源,而不是设置限制。 更新2 我再次testing了限制和资源: resources: limits: cpu: 500m memory: 5Gi requests: cpu: 500m memory: 5Gi 总容量为15G,剩下14G,但是3个豆荚计划运行成功: > free -mh total used free shared buff/cache available Mem: 15G 1.1G 8.3G 3.4M 6.2G […]

为Docker容器设置CPU的绝对限制

我试图设置Docker容器CPU使用的绝对限制。 CPU共享的概念( docker run -c <shares> )是相对的,但我想说的是“让这个容器每100ms使用最多20ms的CPU时间。我能find的最接近的答案是来自邮件的提示列出使用cpu.cfs_quota_us和cpu.cfs_period_us 。如何使用cpu.cfs_quota_us docker run时使用这些设置? 我对LXC支持的Docker(例如pre0.9)或更高版本没有严格的要求,只需要查看正在使用的这些设置的示例 – 任何指向相关文档或有用的博客的链接都非常受欢迎。 我目前使用Ubuntu 12.04,并在/sys/fs/cgroup/cpu/docker我看到这些选项: $ ls /sys/fs/cgroup/cpu/docker cgroup.clone_children cpu.cfs_quota_us cpu.stat cgroup.event_control cpu.rt_period_us notify_on_release cgroup.procs cpu.rt_runtime_us tasks cpu.cfs_period_us cpu.shares