我是新来的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.或者你可以一步一步帮我解决这个问题.我担心之前缺少一些必要的配置会导致这个问题.非常感谢!
我最近再次进行了一些研究,并偶然发现了这一点。在向 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 …
Docker 容器具有与之关联的 cgroup 和命名空间,无论它们是在 pod、虚拟机还是主机中运行。
同样,Kubernetes Pod 是否具有与其关联的命名空间和 cgroup,或者只是 pod 内的容器具有这些(cgroup 和命名空间)关联。如果他们这样做,我如何从主机那里找到这些信息?
cgroups kubernetes docker-container linux-namespaces kubernetes-pod
我从'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服务器上的管理任务比较陌生.
我已经将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,而不在此用户上运行任何其他进程. …
我已经在Kubernetes上运行Kafka了一段时间没有任何重大问题; 然而,我最近推出了一组Cassandra pods并开始遇到Kafka的性能问题.
尽管Cassandra不像Kafka那样使用页面缓存,但它确实会频繁写入磁盘,这可能会影响内核的底层缓存.
我知道Kubernetes pod正在通过cgroup管理内存资源,可以通过在Kubernetes中设置内存请求和限制来配置,但我注意到Cassandra利用页面缓存可以增加我的Kafka pod中的页面错误数量,即使它们是似乎没有竞争资源(即,他们的节点上有可用的内存).
在Kafka中,更多页面错误会导致更多磁盘写入,这会妨碍顺序IO的优势并降低磁盘性能.如果您使用AWS的EBS卷,这将最终耗尽您的突发平衡并最终导致整个群集的灾难性故障.
我的问题是,是否有可能隔离Kubernetes中的页面缓存资源,或者以某种方式让内核知道我的Kafka pod所拥有的页面应该比我的Cassandra pod中的那些更长时间保存在缓存中?
启动 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)
先感谢您。
背景:我正在运行一个 docker 容器,它需要加载/删除一个内核模块,该模块使连接到远程服务器的 USB 设备在主机上可用,然后我希望在容器中可用。
\n\xe2\x80\x94-privileged当使用和 绑定安装运行容器时,它可以/lib/modules工作/dev。
现在我想删除特权模式并只允许最少的必要访问。我尝试\xe2\x80\x94-cap-add=all作为开始,但这似乎还不够。还\xe2\x80\x94-privileged允许什么?
我是 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
我试图了解 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
cgroups ×10
docker ×5
linux ×4
kubernetes ×3
linux-kernel ×2
ubuntu ×2
apache-kafka ×1
centos ×1
containers ×1
java ×1
jvm ×1
memory ×1
page-caching ×1
python ×1
ubuntu-14.04 ×1
vps ×1