linux(centos8):使用cgroups做资源限制
一,什么是cgroups?
其中:Namespace主要用于隔离资源
Cgroups用来提供对一组进程以及将来子进程的资源限制
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,cgroups的用途:
三,cgroups相关的操作命令:
[root@blog ~]$ more /boot/config-`uname -r` | grep -i cgroup
CONFIG_CGROUPS=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
...
[root@node1 ~]# grep cgroup /proc/filesystems
nodev cgroup
nodev cgroup2
[root@blog ~]$ mount | grep cgroup
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
[root@blog ~]# ll /sys/fs/cgroup/
total 0
dr-xr-xr-x 4 root root 0 Jan 10 18:03 blkio
lrwxrwxrwx 1 root root 11 Jan 10 18:03 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Jan 10 18:03 cpuacct -> cpu,cpuacct
dr-xr-xr-x 2 root root 0 Jan 10 18:03 cpu,cpuacct
dr-xr-xr-x 2 root root 0 Jan 10 18:03 cpuset
dr-xr-xr-x 4 root root 0 Jan 10 18:03 devices
dr-xr-xr-x 2 root root 0 Jan 10 18:03 freezer
dr-xr-xr-x 2 root root 0 Jan 10 18:03 hugetlb
dr-xr-xr-x 4 root root 0 Jan 10 18:03 memory
lrwxrwxrwx 1 root root 16 Jan 10 18:03 net_cls -> net_cls,net_prio
dr-xr-xr-x 2 root root 0 Jan 10 18:03 net_cls,net_prio
lrwxrwxrwx 1 root root 16 Jan 10 18:03 net_prio -> net_cls,net_prio
dr-xr-xr-x 2 root root 0 Jan 10 18:03 perf_event
dr-xr-xr-x 4 root root 0 Jan 10 18:03 pids
dr-xr-xr-x 2 root root 0 Jan 10 18:03 rdma
dr-xr-xr-x 5 root root 0 Jan 10 18:03 systemd
[root@blog ~]# more /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 8 1 1
cpu 2 1 1
cpuacct 2 1 1
blkio 4 29 1
memory 7 1703 1
devices 3 60 1
freezer 9 1 1
net_cls 5 1 1
perf_event 10 1 1
net_prio 5 1 1
hugetlb 11 1 1
pids 12 67 1
rdma 6 1 1
四,查看一个进程上的cgroup限制:
以nginx的进程为例
[root@blog ~]# ps auxfww | grep nginx:
root 491 0.0 0.0 71028 3368 ? Ss May18 0:00 nginx: master process /usr/local/openresty/nginx/sbin/nginx
nginx 492 0.0 0.0 102496 7036 ? S May18 0:00 \_ nginx: worker process
nginx 493 0.0 0.0 102764 7496 ? S May18 0:00 \_ nginx: worker process
nginx 494 0.0 0.0 102496 5856 ? S May18 0:00 \_
...
[root@blog ~]# more /proc/492/cgroup
12:pids:/system.slice/openresty.service
11:hugetlb:/
10:perf_event:/
9:freezer:/
8:cpuset:/
7:memory:/system.slice/openresty.service
6:rdma:/
5:net_cls,net_prio:/
4:blkio:/system.slice/openresty.service
3:devices:/system.slice/openresty.service
2:cpu,cpuacct:/
1:name=systemd:/system.slice/openresty.service
[root@blog ~]# ls /sys/fs/cgroup/systemd/system.slice/openresty.service/
cgroup.clone_children cgroup.procs notify_on_release tasks
五,使用libcgroup-tools做进程的限制
说明:从centos7开始,已经默认不再使用libcgroup套件,
所以大家把它作为演示使用即可
[root@blog ~]# dnf install libcgroup-tools
[root@node1 stress]# pwd
/usr/local/source/stress
[root@node1 stress]# wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/s/stress-1.0.4-16.el7.x86_64.rpm
[root@node1 stress]# rpm -ivh stress-1.0.4-16.el7.x86_64.rpm
[root@node1 memory]# stress -m 1 --vm-bytes 50M --vm-keep
stress: info: [14327] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
[root@node1 ~]# pidstat -r | grep stress
14时57分13秒 0 46088 0.01 0.00 7948 972 0.03 stress
14时57分13秒 0 46089 0.07 0.00 59152 51496 1.34 stress
[root@node1 memory]# pwd
/sys/fs/cgroup/memory
[root@node1 memory]# mkdir lhd_stress_memory
[root@node1 memory]# ls lhd_stress_memory/
cgroup.clone_children memory.kmem.limit_in_bytes memory.kmem.tcp.usage_in_bytes memory.memsw.max_usage_in_bytes memory.soft_limit_in_bytes tasks
cgroup.event_control memory.kmem.max_usage_in_bytes memory.kmem.usage_in_bytes memory.memsw.usage_in_bytes memory.stat
cgroup.procs memory.kmem.slabinfo memory.limit_in_bytes memory.move_charge_at_immigrate memory.swappiness
memory.failcnt memory.kmem.tcp.failcnt memory.max_usage_in_bytes memory.numa_stat memory.usage_in_bytes
memory.force_empty memory.kmem.tcp.limit_in_bytes memory.memsw.failcnt memory.oom_control memory.use_hierarchy
memory.kmem.failcnt memory.kmem.tcp.max_usage_in_bytes memory.memsw.limit_in_bytes memory.pressure_level notify_on_release
[root@node1 memory]# expr 1024 \* 1024 \* 10
10485760
设置内存的限制
[root@node1 memory]# echo 10485760 > lhd_stress_memory/memory.limit_in_bytes
用stress测试内存限制
[root@node1 memory]# cgexec -g memory:lhd_stress_memory stress -m 1 --vm-bytes 100M --vm-keep --verbose
stress: info: [35293] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: dbug: [35293] using backoff sleep of 3000us
stress: dbug: [35293] --> hogvm worker 1 [35294] forked
stress: dbug: [35294] allocating 104857600 bytes ...
stress: dbug: [35294] touching bytes in strides of 4096 bytes ...
stress: FAIL: [35293] (415) <-- worker 35294 got signal 9
stress: WARN: [35293] (417) now reaping child worker processes
stress: FAIL: [35293] (451) failed run completed in 0s
[root@node1 memory]# cgexec -g memory:lhd_stress_memory stress -m 1 --vm-bytes 9M --vm-keep --verbose
此时可以正常运行
[root@node1 ~]# pidstat -r | grep stress
14时34分21秒 0 41767 0.05 0.00 7948 1148 0.03 stress
14时34分21秒 0 41768 0.07 0.00 17164 9328 0.24 stress
六,与systemd相关的cgroup操作:
[root@node1 ~]# systemd-cgtop
Control Group Tasks %CPU Memory Input/s Output/s
/ 211 4.0 1.0G - -
/system.slice 84 1.5 831.7M - -
/user.slice 9 0.9 64.3M - -
/system.slice/kubelet.service 15 0.6 31.3M -
…
[root@node1 ~]# systemd-cgls
Control group /:
-.slice
├─user.slice
│ └─user-0.slice
│ ├─session-3.scope
│ │ ├─14349 sshd: root [priv]
…
[root@node1 ~]# man systemd.resource-control
[root@node1 ~]# more /sys/fs/cgroup/memory/system.slice/nginx.service/memory.limit_in_bytes
9223372036854771712
[root@node1 ~]# systemctl set-property nginx.service MemoryLimit=512M
[root@node1 ~]# more /sys/fs/cgroup/memory/system.slice/nginx.service/memory.limit_in_bytes
536870912
[root@node1 ~]# systemctl cat nginx
# /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target [Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true [Install]
WantedBy=multi-user.target # /etc/systemd/system.control/nginx.service.d/50-MemoryLimit.conf
# This is a drop-in unit file extension, created via "systemctl set-property"
# or an equivalent operation. Do not edit.
[Service]
MemoryLimit=536870912
[root@node1 ~]# systemctl set-property nginx.service CPUQuota=80%
七,查看linux的版本:
[root@node1 ~]# more /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
[root@node1 ~]# uname -r
4.18.0-147.el8.x86_64
linux(centos8):使用cgroups做资源限制的更多相关文章
- linux(centos8):使用namespace做资源隔离
一,namespace是什么? namespace 是 Linux 内核用来隔离内核资源的方式. 它是对全局系统资源的封装隔离, 处于不同 namespace 的进程拥有独立的全局系统资源, 改变一个 ...
- 理解Docker(4):Docker 容器使用 cgroups 限制资源使用
本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- 容器基础(三): 使用Cgroups进行资源限制
Linux Cgroups Linux Cgroups 是 Linux 内核中用来为进程设置资源限制的一个重要功能. Cgroups将进程进行分组, 然后对这一组进程进行统一的资源监控和限制.Cgro ...
- 高级Linux SA需要会做的事情
高级Linux SA需要会做的事情:linux---------系统安装(光盘或自动化安装)linux---------系统常用工具安装(sudo,ntp,yum,rsync,lrzsz syssta ...
- Linux磁盘空间被未知资源耗尽【转】
Linux磁盘空间被未知资源耗尽 在linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间, ...
- Linux学习之CentOS(十七)-----释放 Linux 系统预留的硬盘空间 与Linux磁盘空间被未知资源耗尽 (转)
释放 Linux 系统预留的硬盘空间 大多数文件系统都会保留一部分空间留作紧急情况时用(比如硬盘空间满了),这样能保证有些关键应用(比如数据库)在硬盘满的时候有点余地,不致于马上就 crash,给监 ...
- 我把一些Linux的中英文命令做了对应翻译大家参考一下
本文我们把Linux的中英文命令做了对应翻译,给需要的朋友参考一下.(http://wap.0834jl.com) 很多朋友在论坛上找Linux英文命令,我们给大家整理了比较全的Linux英文命令,并 ...
- linux下获取占用CPU资源最多的10个进程
linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...
- Linux下查看占用CPU资源最多的几个进程
linux下获取占用CPU资源最多的10个进程: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用内存资源最多的10个进 ...
随机推荐
- 深入理解 vue 中 scoped 样式作用域的规则
哈喽!大家好!我是木瓜太香,今天我们来聊一个 vue 的样式作用域的问题,通常我们开发项目的时候是要在 style 上加上 scoped 来起到规定组件作用域的效果的,所以了解他们的规则也是很有必要的 ...
- 乔悟空-CTF-i春秋-Web-SQL
2020.09.05 是不是有些题已经不能做了--费了半天,到最后发现做不出来,和网上大神的方法一样也不行,最搞笑的有个站好像是别人运营中的,bug好像被修复了-- 做题 题目 题目地址 做题 尝试简 ...
- springboot之启动端口指定
https://www.cnblogs.com/yaomajor/p/8616929.html
- list、set、map的区别和联系
结构特点 List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合: List中存储的数据是有顺序的,并且值允许重复:Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许 ...
- 从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞
从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞 pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 其本质是Picklin ...
- 吴恩达Machine Learning学习笔记(二)--多变量线性回归
回归任务 多变量线性回归 公式 h为假设,theta为模型参数(代表了特征的权重),x为特征的值 参数更新 梯度下降算法 影响梯度下降算法的因素 (1)加速梯度下降:通过让每一个输入值大致在相同的范围 ...
- Java反应式框架Reactor中的Mono和Flux
1. 前言 最近写关于响应式编程的东西有点多,很多同学反映对Flux和Mono这两个Reactor中的概念有点懵逼.但是目前Java响应式编程中我们对这两个对象的接触又最多,诸如Spring WebF ...
- Centos-重定向方式打包、备份、还原、恢复工具-cpio
cpio 通过重定向方式将文件进行打包.备份.还原.恢复工具,扩展名为 .cpio 相关选项 -o 将文件复制.打包成文件或将将文件输出到标准输出 -i 将打包文件或者将设备上的备份还原到系统中 - ...
- DIV垂直滚动效果源码
<div id="demo" style="width: 300; overflow: hidden; line-height:24px; height: 100p ...
- 【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置
[Go语言入门系列]前面的文章: [Go语言入门系列](七)如何使用Go的方法? [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞懂怎么用接口 本篇文 ...