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个进 ...
随机推荐
- python 3 for嵌套
- python爬虫学习过程记录
项目为爬取Python词条的信息. 项目代码在我的码云仓库. https://gitee.com/libo-sober/learn-python/tree/master/baike_spider 1. ...
- 乔悟空-CTF-i春秋-Web-GetFlag
2020.09.07 今天发生了一些事情,世事无常,哎.好好的享受当下,该吃吃该喝喝好吧.人活一辈子,到底为了啥? 做题 题目 题目地址 做题 这个题目还行,思路比较清晰,没那么多奇怪的脑洞
- [Binder深入学习二]Binder驱动——基础数据结构二
Userspace和KernelSpace进行交互时,大部分命令是通过 ioctl 实现的,在这个过程中,最重要的一个便是 BINDER_WRITE_READ 命令了. #define BINDER_ ...
- day55:django:cookie&session
目录 1.Cookie 1.Cookie前戏 2.Cookie的引入 3.django中操作cookie 2.Session 1.cookie的局限性 2.session技术 3.django操作se ...
- 实战Docker容器调度
目录 一.前言 二.Docker Compose 2.1.简介 2.2.下载安装 2.3.小实验 2.4.小实验的细节 2.5.Compose file的编写规则 三.Docker Swarm 3.1 ...
- Ajax一目了然
1.ajax的概念 局部刷新技术.不是一门新技术,是多种技术的组合.是浏览器端的技术. 2.ajax的作用. 实现在当前结果页面中显示其他请求的响应内容 3.ajax的使用 ajax的基本流程 //创 ...
- kafka面试总结
本文为复习期间面试总结 从以下方面对kafka面试进行总结:基本原理架构/项目实践/生产者/消费者/协调者/存储层/控制器 基本原理架构 简单讲下什么是kafka[一句话概括/架构图] 消息队列选型 ...
- Centos-查看磁盘分区占用情况-df
df 检查linux系统中磁盘分区占用情况 相关选项 -h 以人类友好读方式显示 -k 以KB为单位输出磁盘分区使用情况 -m 以MB为单位输出磁盘分区使用情况 -a 列出所有文件系统分区情况,包 ...
- 在KEIL下查看单片机编程内存使用情况
原文链接:https://blog.csdn.net/D_azzle/article/details/83410141 截至到目前为止,本人接触单片机也有将近一年的时间.这一年以来也接触过了很具代表性 ...