标签: cgroups

在ubuntu上,Cgroups/sys/fs/cgroup为空

我是新来的cgroup.我想用来cgroup绑定Qemu一些CPU.我正在使用自己的编译内核开发Ubuntu 12.04.3 3.11.0+.
下面是我的命令的一些输出.

root@xiao-laptop:~/tamlok# service cgconfig start
start: Job failed to start
root@xiao-laptop:~/tamlok# ls /sys/fs/cgroup/
root@xiao-laptop:~/tamlok# cat /proc/mounts | grep cgroup
root@xiao-laptop:~/tamlok# lssubsys --al
cpuset
cpu
cpuacct
devices
freezer
blkio
perf_event
Run Code Online (Sandbox Code Playgroud)

/sys/fs/cgroup/空虚真的让我困惑.我不知道接下来要做什么才能实现我的目标.好像cgroup没挂?那有什么不对呢?如果您需要有关我的平台的任何信息来解决它,请告诉我.

其实我不知道配置和使用的整个过程cgroup.或者你可以一步一步帮我解决这个问题.我担心之前缺少一些必要的配置会导致这个问题.非常感谢!

ubuntu cgroups

7
推荐指数
1
解决办法
1万
查看次数

容器中的JVM错误地计算处理器?

我最近再次进行了一些研究,并偶然发现了这一点。在向 OpenJDK 团队抱怨之前,我想看看其他人是否观察到了这一点,或者不同意我的结论。

因此,众所周知,JVM 长期以来一直忽略应用于 cgroup 的内存限制。众所周知,它现在将它们考虑在内,从 Java 8 开始更新某些内容,以及 9 和更高版本。不幸的是,基于 cgroup 限制所做的计算是如此无用,以至于您仍然必须手动完成所有工作。请参阅谷歌和数百篇关于此的文章。

我几天前才发现的,并且没有在这些文章中阅读任何一篇文章,是 JVM 如何检查 cgroup 中的处理器数量。处理器计数用于决定用于各种任务的线程数,包括垃圾收集。所以正确理解很重要。

在 cgroup 中(据我所知,我不是专家)您可以设置可用 cpu 时间的限制(--cpusDocker 参数)。这仅限制时间,而不限制并行性。还有 cpu 份额(--cpu-sharesDocker 参数),这是在负载下分配 cpu 时间的相对权重。Docker 将默认值设置为 1024,但这纯粹是一个相对比例。

最后,还有 cpu 集(--cpuset-cpus用于 Docker)将 cgroup 和 Docker 容器显式分配给处理器的子集。这与其他参数无关,实际上会影响并行性。

因此,在检查我的容器可以并行运行多少线程时,据我所知,只有 cpu 集是相关的。JVM 虽然忽略了这一点,而是使用 cpu 限制(如果设置),否则 cpu 共享(假设 1024 默认为绝对比例)。恕我直言,这已经很错误了。它计算可用的 CPU 时间来调整线程池的大小。

在 Kubernetes 中情况变得更糟。AFAIK 最佳实践是不设置 cpu 限制,以便集群节点具有高利用率。此外,您应该为大多数应用程序设置一个低 CPU 请求,因为它们大部分时间都处于空闲状态,并且您希望在一个节点上安排多个应用程序。Kubernetes 将请求以毫 cpu 为单位设置为 cpu 份额,最有可能在 1000m 以下。JVM 始终假设一个处理器,即使您的节点运行在某个 64 核 CPU 怪物上。

有没有人也观察过这一点?我在这里错过了什么吗?还是 JVM …

java jvm cgroups docker kubernetes

7
推荐指数
1
解决办法
2729
查看次数

Kubernetes POD 是否有与其关联的命名空间和 cgroup?

Docker 容器具有与之关联的 cgroup 和命名空间,无论它们是在 pod、虚拟机​​还是主机中运行。
同样,Kubernetes Pod 是否具有与其关联的命名空间和 cgroup,或者只是 pod 内的容器具有这些(cgroup 和命名空间)关联。如果他们这样做,我如何从主机那里找到这些信息?

cgroups kubernetes docker-container linux-namespaces kubernetes-pod

7
推荐指数
2
解决办法
3723
查看次数

关于cgroup交换限制的docker警告,memory.use_hierarchy

我从'sudo docker -d'得到这个警告:

警告:您的内核不支持cgroup交换限制.

即使遵循这些步骤(如此链接):

  • 在/ etc/default/grub中修改下面的行(我做了两个好的措施)

    RUB_CMDLINE_LINUX_DEFUALT ="cgroup_enable = memory swapaccount = 1"GRUB_CMDLINE_LINUX ="cgroup_enable = memory swapaccount = 1"

  • 然后通过更新grub/reboot

    sudo update-grub; sudo重启

我的问题是:

1)我应该担心这个警告吗?

我想我应该是因为我试图在一个强制内存限制很重要的用例中使用docker容器.

2)更改内存use_hierarchy设置是否是个好主意? - 或 - 解决此问题的最佳方法是什么?

我在'dmesg'中看到了这个警告.我不确定尝试将use_hierarchy设置更改为'1'是否是一个好主意(也不确定如何做到这一点)

cgroup:"memory"需要在root上将use_hierarchy设置为1."

或者,有没有更好的方法来解决这个问题?我只是在这里开枪,也许内核升级会有所帮助?我看到一些3.16内核升级是可能的.

环境: 我正在使用docker version 1.0.1运行Ubuntu 14.04 x64(内核:3.13.0-43-generic x86_64)

其他说明: 我已阅读其他有关类似docker/cgroup错误的在线帮助文​​章,说安装apparmor_parser修复它.但是,在我的系统上,安装了apparmor并且似乎启动得很好(每dmesg).此外,此文件存在:/ sbin/apparmor_parser

另外,我对Linux服务器上的管理任务比较陌生.

linux ubuntu cgroups docker ubuntu-14.04

6
推荐指数
1
解决办法
5973
查看次数

如何实现内存密集型python脚本进行测试

我已经将cgroups规则应用于特定用户,并且我想测试从上述用户运行的程序的内存是否已按预期限制.我尝试使用以下脚本:

import string
import random

if __name__ == '__main__':
    d = {}
    i = 0;
    for i in range(0, 100000000):
        val = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(200)) # generate ramdom string of size 200
        d[i] = val
        if i % 10000 == 0:
            print i
Run Code Online (Sandbox Code Playgroud)

当我通过ps命令监视进程时,结果是%MEM增加到4.8并且当两个cgroups服务打开和关闭时从未改变:

$ ps aux | grep mem_intensive.py
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
jason    11531 88.5  4.8 3312972 3191236 pts/0 R+   22:16   0:07 python mem_intensive.py
Run Code Online (Sandbox Code Playgroud)

在这种情况下,总内存为62GB,因此其中4.8%约为3GB.我将限制设置为4GB,而不在此用户上运行任何其他进程. …

python memory cgroups

6
推荐指数
1
解决办法
1517
查看次数

如何在Kubernetes中运行Kafka时管理页面缓存资源

我已经在Kubernetes上运行Kafka了一段时间没有任何重大问题; 然而,我最近推出了一组Cassandra pods并开始遇到Kafka的性能问题.

尽管Cassandra不像Kafka那样使用页面缓存,但它确实会频繁写入磁盘,这可能会影响内核的底层缓存.

我知道Kubernetes pod正在通过cgroup管理内存资源,可以通过在Kubernetes中设置内存请求和限制来配置,但我注意到Cassandra利用页面缓存可以增加我的Kafka pod中的页面错误数量,即使它们是似乎没有竞争资源(即,他们的节点上有可用的内存).

在Kafka中,更多页面错误会导致更多磁盘写入,这会妨碍顺序IO的优势并降低磁盘性能.如果您使用AWS的EBS卷,这将最终耗尽您的突发平衡并最终导致整个群集的灾难性故障.

我的问题是,是否有可能隔离Kubernetes中的页面缓存资源,或者以某种方式让内核知道我的Kafka pod所拥有的页面应该比我的Cassandra pod中的那些更长时间保存在缓存中?

page-caching apache-kafka cgroups kubernetes

6
推荐指数
1
解决办法
1258
查看次数

如何解决“mountinfo 中未找到 cgroup 安装:未知”错误?

启动 docker 容器时出现以下错误。

 Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.go:326: applying cgroup configuration for process caused: no cgroup mount found in mountinfo: unknown
    Error: failed to start containers: postgres-11

My docker version is ----> Docker version 19.03.13-ce, build 4484c46
OS--> 
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Run Code Online (Sandbox Code Playgroud)

先感谢您。

linux centos amazon-web-services cgroups docker

6
推荐指数
1
解决办法
1万
查看次数

docker 中 `--privileged` 和 `--cap-add=all` 之间的区别

背景:我正在运行一个 docker 容器,它需要加载/删除一个内核模块,该模块使连接到远程服务器的 USB 设备在主机上可用,然后我希望在容器中可用。

\n

\xe2\x80\x94-privileged当使用和 绑定安装运行容器时,它可以/lib/modules工作/dev

\n

现在我想删除特权模式并只允许最少的必要访问。我尝试\xe2\x80\x94-cap-add=all作为开始,但这似乎还不够。还\xe2\x80\x94-privileged允许什么?

\n

linux containers cgroups docker linux-capabilities

6
推荐指数
1
解决办法
5869
查看次数

Docker 容器启动问题:为 procHooks 进程设置 cgroup 配置导致

我是 Docker 的小新手。我试图在 docker 上部署 Hortonworks 沙箱,但不幸的是,遇到了以下错误。

docker:来自守护进程的错误响应:OCI运行时创建失败:container_linux.go:380:启动容器进程导致:process_linux.go:545:容器初始化导致:process_linux.go:508:为procHooks进程设置cgroup配置导致:生成的设备cgroup与目标模式不匹配:未知。

一旦我能够在不同的服务器上正确设置所有内容,即 Contabo 的 Ubuntu 20.04 VPS。

但这次我使用了 VPSDime 的 VPS,并在 3 个不同的操作系统上进行了测试,并出现了相同的错误:Ubuntu 20.04、Ubuntu 18.04、CentOS 8。

请帮助我,我在这里遵循了本指南: https: //tomas-savenas.medium.com/hortonworks-sandbox-hdp-3-0-on-ubuntu-18-04-using-docker-da579fd654f9

vps linux-kernel cgroups docker hortonworks-sandbox

6
推荐指数
1
解决办法
6565
查看次数

Linux 内核 - 页缓存、结构地址空间和内存 cgroup 之间有什么关系?

我试图了解 Linux 页面缓存以及它与内存 cgroup (v2) 的关系。我知道使用 cgroupsv1,内存 cgroup 可以被隔离并具有独立的 LRU 列表(我假设 cgroupsv2 是相同的)。这个事实以及mm/vmscan.c有很多引用mem_cgroups并且有一个名为 的函数的shrink_node_memcgs事实,让我认为每个 cgroup 都有自己的页面缓存。这个假设是真的吗?页面缓存中的所有页面都属于一个 cgroup 吗?

struct address_space如果这是真的,我知道页面缓存由(此处)表示。如何找出与给定的 cgroup 关联的内容struct address_space?我是否必须只找到其中​​的第一页,struct address_space然后从该页面中找到 cgroup?

linux operating-system memory-management linux-kernel cgroups

6
推荐指数
1
解决办法
921
查看次数