cgroup

Cgroups 是 control groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。

cpu限制

1.打开docker并检测cgroup是否开启

[root@server1 ~]# systemctl start docker
[root@server1 ~]# mount -t cgroup

2.cgroup子系统的层级路径

[root@server1 ~]# cd /sys/fs/cgroup/
[root@server1 cgroup]# ll
total 0
drwxr-xr-x 4 root root  0 Jun  4 10:18 blkio
lrwxrwxrwx 1 root root 11 Jun  4 10:18 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Jun  4 10:18 cpuacct -> cpu,cpuacct
drwxr-xr-x 4 root root  0 Jun  4 10:18 cpu,cpuacct
drwxr-xr-x 2 root root  0 Jun  4 10:18 cpuset
drwxr-xr-x 4 root root  0 Jun  4 10:18 devices
drwxr-xr-x 2 root root  0 Jun  4 10:18 freezer
drwxr-xr-x 2 root root  0 Jun  4 10:18 hugetlb
drwxr-xr-x 4 root root  0 Jun  4 10:18 memory
lrwxrwxrwx 1 root root 16 Jun  4 10:18 net_cls -> net_cls,net_prio
drwxr-xr-x 2 root root  0 Jun  4 10:18 net_cls,net_prio
lrwxrwxrwx 1 root root 16 Jun  4 10:18 net_prio -> net_cls,net_prio
drwxr-xr-x 2 root root  0 Jun  4 10:18 perf_event
drwxr-xr-x 2 root root  0 Jun  4 10:18 pids
drwxr-xr-x 4 root root  0 Jun  4 10:18 systemd

3.CPU控制族群

[root@server1 cgroup]# cd cpu
[root@server1 cpu]# ls
cgroup.clone_children  cpuacct.usage         cpu.rt_runtime_us  system.slice
cgroup.event_control   cpuacct.usage_percpu  cpu.shares         tasks
cgroup.procs           cpu.cfs_period_us     cpu.stat           user.slice
cgroup.sane_behavior   cpu.cfs_quota_us      notify_on_release
cpuacct.stat           cpu.rt_period_us      release_agent
[root@server1 cpu]# mkdir x1
[root@server1 cpu]# cd x1/
[root@server1 x1]# ls                                              ##继承上一级目录的所有文件
cgroup.clone_children  cpuacct.usage         cpu.rt_period_us   notify_on_release
cgroup.event_control   cpuacct.usage_percpu  cpu.rt_runtime_us  tasks
cgroup.procs           cpu.cfs_period_us     cpu.shares
cpuacct.stat           cpu.cfs_quota_us      cpu.stat
[root@server1 x1]# cat cpu.cfs_period_us
100000
[root@server1 x1]# cat cpu.cfs_quota_us
-1                                              ##-1代表无限制
[root@server1 x1]# echo 20000 > cpu.cfs_quota_us
[root@server1 x1]# cat cpu.cfs_quota_us
20000                                       ##20000占100000的五分之一,所以是百分之二十
[root@server1 x1]# dd if=/dev/zero of=/dev/null &
[1] 2463

top
没有限制成功,因为没有添加到tasks中

[root@server1 x1]# echo 2463 > tasks

top ##cpu被限制到了百分之二十


4.容器测试

[root@server1 ~]# docker run -it --name vm1 --cpu-quota=20000 ubuntu
root@21a931db8acc:/# dd if=/dev/zero of=/dev/null &[root@server1 ~]# docker run -it --name vm2 ubuntu
root@5bb40832dd8a:/# dd if=/dev/zero of=/dev/null &

top查看vm1占百分之二十,剩下的cpu被vm2使用

[root@server1 cpu]# cd docker/
[root@server1 docker]# ls
a780df0fc198afa1d65ddf68e42287cf792efd279b344104ee73c891aa5ac50f
[root@server1 docker]# cd a780df0fc198afa1d65ddf68e42287cf792efd279b344104ee73c891aa5ac50f/
[root@server1 a780df0fc198afa1d65ddf68e42287cf792efd279b344104ee73c891aa5ac50f]# cat cpu.cfs_quota_us
20000
内存限制
内存限制
/sys/fs/cgroup/memory/x2
[root@server1 x2]# cat memory.limit_in_bytes
9223372036854771712
[root@server1 x2]# echo 314572800 > memory.limit_in_bytes
[root@server1 x2]# cd /dev/shm/
[root@server1 shm]# ls
[root@server1 shm]# dd if=/dev/zero of=bigfile bs=1M count=400
400+0 records in
400+0 records out
419430400 bytes (419 MB) copied, 0.244224 s, 1.7 GB/s          ##无法限制[root@server1 shm]# yum search cgroup
[root@server1 shm]# yum install libcgroup-tools.x86_64 -y
[root@server1 shm]# free -mtotal        used        free      shared  buff/cache   available
Mem:            992         125         525           7         341         710
Swap:          1023           5        1018
[root@server1 shm]# cgexec -g memory:x2 dd if=/dev/zero of=bigfile bs=1M count=400
400+0 records in
400+0 records out
419430400 bytes (419 MB) copied, 0.245783 s, 1.7 GB/s
[root@server1 shm]# free -mtotal        used        free      shared  buff/cache   available
Mem:            992         129         226         301         636         410
Swap:          1023         111         912                                         ##限制成功,其实之占用了300M[root@server1 shm]# cd /sys/fs/cgroup/memory/x2/
[root@server1 x2]# cat memory.memsw.limit_in_bytes
9223372036854771712[root@server1 shm]# rm -f bigfile
[root@server1 x2]# echo 314572800 > memory.memsw.limit_in_bytes[root@server1 shm]# cgexec -g memory:x2 dd if=/dev/zero of=bigfile bs=1M count=400
Killed
容器资源限制

1.限制容器内存

[root@server1 ~]# docker run -it --name vm1 --memory=300M --memory-swap=300M ubuntu
root@b232ef01b673:/#
root@b232ef01b673:/# free -mtotal       used       free     shared    buffers     cached
Mem:           992        402        590         12          0        248
-/+ buffers/cache:        153        839
Swap:         1227          0       1227
root@b232ef01b673:/# dd if=/dev/zero of=bigfile bs=1M count=400
400+0 records in
400+0 records out
419430400 bytes (419 MB) copied, 2.77425 s, 151 MB/s
root@b232ef01b673:/# free -mtotal       used       free     shared    buffers     cached
Mem:           992        699        293         12          0        533           ##限制成功,只可以使用300M,但是隔离性不行,显示的总用有992M而不是300M
-/+ buffers/cache:        164        827
Swap:         1227          0       1227

2.增加隔离性

[root@server1 ~]# yum install lxcfs-2.0.5-3.el7.centos.x86_64.rpm  -y
[root@server1 ~]# cd /var/lib/lxcfs/
[root@server1 lxcfs]# ls
[root@server1 lxcfs]# cd
[root@server1 ~]# lxcfs /var/lib/lxcfs/ &
[1] 2541
[root@server1 ~]# hierarchies:0: fd:   5: net_prio,net_cls1: fd:   6: devices2: fd:   7: blkio3: fd:   8: freezer4: fd:   9: pids5: fd:  10: perf_event6: fd:  11: memory7: fd:  12: cpuset8: fd:  13: cpuacct,cpu9: fd:  14: hugetlb10: fd:  15: name=systemd
[root@server1 ~]# cd /var/lib/lxcfs/
[root@server1 lxcfs]# ls
cgroup  proc
[root@server1 lxcfs]# cd proc/
[root@server1 proc]# ls
cpuinfo  diskstats  meminfo  stat  swaps  uptime
[root@server1 proc]# docker run -it -m 300m \
> -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \
> -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
> -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
> -v /var/lib/lxcfs/proc/stat:/proc/stat:rw \
> -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
> -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
> ubuntu
root@e1c1c580defa:/# free -mtotal       used       free     shared    buffers     cached
Mem:           300          2        297         12          0          0
-/+ buffers/cache:          2        297
Swap:          300          0        300

Docker--cgroup相关推荐

  1. kubelet cgroup driver与docker cgroup drive不一致解决方案

    某个早上,本人刚打开电脑测试就开始找上了我.啊!!!测试环境的k8s启动不了了!!!作为一个成天摸鱼哦不!!努力工作的小姑娘.本着助人为乐的原则,我决定要发挥一下我的作用~今天就要去测试环境给他搞好! ...

  2. kubeadm初始化集群报错:kubelet driver: “cgroupfs“ is different from docker cgroup driver: “systemd“

    kubeadm初始化集群报错:   报错信息如下: [kubelet-check] It seems like the kubelet isn't running or healthy. [kubel ...

  3. 修改 docker cgroup 版本的方法 (changing cgroup version)

    Kubernetes 从 1.19 起支持 cgroup v2 版本,如需运行 1.19 之前的老版本,需要宿主机 Docker 使用 cgroup v1. 默认新版 docker 都默认使用 cgr ...

  4. Docker Cgroup资源配置(CPU、内存、磁盘)

    一.Cgroup 资源配置方法 Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使用量控制. Cgroup 是 Control ...

  5. Docker系列---docker cgroup资源管理 | TLS通讯加密 | 详细讲解

    Cgroup 前言 - Cgroup 一.对 CPU 的控制 1.使用 stress 工具测试 2.限制 CPU 使用周期速率 3.多任务比例分享 CPU 4.限制 CPU 内核使用 二.对内存使用的 ...

  6. [WARNING IsDockerSystemdCheck]: detected “cgroupfs“ as the Docker cgroup driver. The recommended dri

    vim /etc/docker/daemon.json{"exec-opts":["native.cgroupdriver=systemd"] }systemc ...

  7. k8s集群节点无法创建pod解决:错误提示(Docker error : “/sys/fs/cgroup/memory/xxxx“ “no space left on device“)

    前言 最近部门的k8s 集群为了扩展,增加了两个节点,结果用了一段时间后莫名出现了以下问题,新增的这两个节点上无法创建pod 从rancher发现事件报错信息如下: 问题排查步骤 第一步: 报错信息说 ...

  8. Windows7 下Ubuntu VM 中Docker连接不上的问题及解决方案

    最近在学习Java微服务,不可避免的会涉及到将微服务容器化. 由于使用Windows7作为开发环境,最初几天用了VirtualBox 和 boot2docker,但是经常会出现如下两个问题: 1,在电 ...

  9. 故障error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: “

    环境: docker:18.09.9 kubernetes:1.17 错误信息: error: failed to run Kubelet: failed to create kubelet: mis ...

  10. 如何在CentOS 7上安装Kubernetes Docker群集

    如何在CentOS 7上安装Kubernetes Docker群集 Kubernetes是一个开源平台,用于管理由Google开发的容器化应用程序.它允许您在集群环境中管理,扩展和自动部署容器化应用程 ...

最新文章

  1. 虚拟化如何做实?详解戴尔2.0版解决方案
  2. 图片日志:深拷贝和浅拷贝的区别/序列化及反序列化
  3. 简单三分钟,本地搭建k8s
  4. SQLAPI报错:API client not set
  5. Pokémon Go呼应设计:让全世界玩家疯狂沉迷
  6. cxf超时设置不起效_jmeter集合点设置(十三)
  7. 不瞒你说,我最近跟Java源码杠上了
  8. 企业微信二维码转成名片
  9. SameTime8.5.1安装失败故障诊断
  10. Qt之Windows下禁用中文输入法
  11. python的out模式_Python设计模式之状态模式
  12. 色彩模式-RGB、HSV、CMYK、灰度模式、位图模式......
  13. 华为鸿蒙os设置界面,华为鸿蒙OS系统界面疑似曝光 运行性能提升超60%
  14. 假如腾讯跟360之战是一场阴谋联想到的
  15. 软件测试的国家标准及链接,软件测试相关国家标准.doc
  16. 中文Analytics Intelligence 问答系统 (一)
  17. 纯css实现蓝色圆角效果水平导航菜单代码
  18. android 工作空间不足,如何解决Android Studio的磁盘空间不足?
  19. 2:Alibaba微服务组件Nacos注册中心
  20. U5 CentOS系统的U盘启动与安装-孙宇彤-专题视频课程

热门文章

  1. [ASP.NET]下载txt格式的文件
  2. SQL将两列合并为一列
  3. maven卸载强制性依赖
  4. Hadoop数据工程师_大数据Hadoop技术好学吗
  5. 如何用c语言对51单片机进行编程,C语言在51单片机编程中的应用技巧
  6. jar包、class文件批量反编译并解压
  7. 【记录】ubuntu下安装和部署RAP2
  8. linux usb摄像头使用方法,linux 下USB 摄像头的使用说明
  9. 在线重装Win11系统详细教程
  10. JanusGraph环境搭建实战