资源限制
资源类型
可压缩资源
CPU 磁盘 网络。。。
不可压缩资源
内存。。。
资源限制原理--CGROUP
CGROUP概念
Linux Cgroup 全称 Linux Control Group, 是 Linux 内核的一个功能,用来限制,控制与分离一个进程组群的资源(如 CPU、内存、磁盘输入输出等)。这个项目最早是由 Google 的工程师在 2006 年发起,最早的名称为进程容器( process containers )。在 2007 年时,因为在 Linux 内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为 cgroup,并且被合并到 2.6.24 版的内核中去。
CGROUP功能
限制资源使用
优先级控制
一些审计或一些统计
挂起进程,恢复执行进程
# 详细划分
cpu 子系统,主要限制进程的 cpu 使用率
cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告
cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点
memory 子系统,可以限制进程的 memory 使用量
blkio 子系统,可以限制进程的块设备 io
devices 子系统,可以控制进程能够访问某些设备
net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制
net_prio — 这个子系统用来设计网络流量的优先级
freezer 子系统,可以挂起或者恢复 cgroups 中的进程
ns 子系统,可以使不同 cgroups 下面的进程使用不同的 namespace
hugetlb — 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统
CGROUP资源限制实验
# 查看 Cgroup 挂载点 ,挂载。
$ mount -t cgroup
# 进入目录,创建隔离组
$ cd /sys/fs/cgroup/cpu
$ mkdir cpu_test
# tasks存放系统运行的进程
# 安装C语言编译环境
$ yum -y install gcc gcc-c++
# 在家目录下创建循环叠加测试文件
$ vim main.c
int main(void)
{
int i = 0;
for(;;) i++;
return 0;
}
# 编译
$ gcc main.c
$ chmod a+x a.out
# 新开窗口top命令监测CPU使用率
$ top
# 添加资源限制,并观察CPU使用情况是否限制
$ cd /sys/fs/cgroup/cpu/cpu_test
$ echo 23732 >> /sys/fs/cgroup/cpu/cpu_test/tasks
# 划分配额,默认配额100000
$ echo 20000 > /sys/fs/cgroup/cpu/cpu_test/cpu.cfs_quota_us
# 证明了资源限制可行性
内存资源限制
默认情况下,如果不对容器做任何限制,容器能够占用当前系统能给容器提供的所有资源
> Docker 限制可以从 Memory、CPU、Block I/O 三个方面
> OOME:Out Of Memory Exception
>> 一旦发生 OOME,任何进程都有可能被杀死,包括 docker daemon 在内
>> 为此,Docker 调整了 docker daemon 的 OOM 优先级,以免被内核关闭
CPU资源限制
> 默认情况下,如果不对容器做任何限制,容器能够占用当前系统中的所有 CPU 资源
> 大多数进程是采用 CFS 调度算法
> 1.13 Docker 版本后支持实时调度算法
限制实验
# 上传并导入压测软件包
$ docker load -i stress.tar
# 内存使用限制
$ docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2
# docker run 运行 --name 指定名称 -it 交互模式 --rm 停止即删除 -m 内存限制大小 指定镜像名称:版本号 指定容器内部运行的命令(2个线程压测)
# 查看压测结果
$ docker stats
# CPU核心数量限制
$ docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8
# 绑定cpu节点限制
$ docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8
标签:容器,stress,限制,--,子系统,docker,cpu
From: https://blog.51cto.com/jiaweiCTO/6905882