赞
踩
使用cgroup限制CPU核数、memory利用率和CPU利用率
cgroup(Control Groups):以分组的形式对进程使用系统的行为进行管理和控制的机制。
通过cgroup对所有进程进行分组,再对分组整体进行资源的分配和控制。每个进程组包含多个进程。如果某个进程组的进程创建了子进程,那么该子进程默认与父进程处于同一进程组。也就是说,cgroup对该进程组的资源控制同样作用于子进程。
cgroup中每个子系统都代表一种类型分资源,具体如下:
1)CPU子系统:每个子系统为每个进程组设置一个使用CPU的权重,一次来管理进程对cpu的访问。
2)cpuset子系统:对于多核cpu,该子系统可以设置进程组只能在指定的核上运行,并且还可以设置进程组在指定的内存节点上申请内存。
3)cpuacct子系统:该子系统只用于生成当前进程组内的进程对cpu的使用报告。
4)memory子系统:该子系统提供了以页面为单位对内存的访问,比如对进程组设置内存使用上限等,同时可以生成内存资源报告。
5) blkio子系统:该子系统用于限制块设备的输入输出。首先,与CPU子系统类似,该系统通过为每个进程组设置权重来控制块设备对其的I/O时间;其次,该子系统也可以限制进程组的I/O带宽以及IOPS。
6) devices子系统:通过该子系统可以限制进程组对设备的访问,即该允许或禁止进程组对某设备的访问。
7) freezer子系统:该子系统可以使得进程组中的所有进程挂起。
8) net-cls子系统:该子系统提供对网络带宽的访问限制,比如对发送带宽和接收带宽进程限制。
9)ns子系统:名称空间子系统,可以使不同 cgroups 下面的进程使用不同的 namespace。
cpuset子系统
cpuset.cpus(强制)
设定该cgroup任务可以访问的CPU
# echo 0-3 > cpuset.cpus 表示允许访问cpu 0-3
cpuset.mems(强制)
设定该cgroup中任务可以访问的内存节点
# ehco 0 > cpusets.mems 表示允许访问0号内存节点
taskset命令
依据线程PID查询或者设置线程的CPU亲和性(即与哪个CPU核心绑定)
# taskset -p 14567 //查询执行PID进程/线程额CPU核心数
cgexec命令
在指定的cgroup中运行任务
# cgexec -g cpuset:mycpuset ./a.sh //在mycpuset系统中运行a.sh脚本
memory.limit_in_bytes
设定用户内存(包括文件缓存)的最大用量。默认单位是字节。
memory.oom_control
包含标签(0或者1),表示为cgroup启用或者禁用“内存不足”终止程序。(0)尝试消耗超过其允许内存的任务会被OOM终止程序立即终止,(1)禁用“OOM”终止程序。默认情况下该值时(0)。
# echo 1 > /cgroup/memory/lab1/memory.oom_control
cpu.rt_runtime_us
指定在某个时间段中,cgroup中的任务对CPU资源的最长连续访问时间,单位为微秒μs。
cpu.cfs_period_us
重新分配cgroup可用CPU资源的时间周期,单位为微秒μs。
cpu.cfs_quota_us
在某一阶段(由cpu.cfs_period_us规定)某个cgroup中所有任务可运行的时间总量,单位为微秒μs。
- //如果让一个cgroup完全使用一个CPU
- # ehco 10000 > /cgroup/cpu/red/cpu.cfs_quota_us
- # echo 10000 > /cgroup/cpu/red/cpu.cfs_period_us
-
-
- //如果让一个cgroup使用10%的CPU
- # ehco 10000 > /cgroup/cpu/red/cpu.cfs_quota_us
- # echo 100000 > /cgroup/cpu/red/cpu.cfs_period_us
-
-
- //在多核系统中,如果让一个cgroup完全使用两个CPU核
- # ehco 200000 > /cgroup/cpu/red/cpu.cfs_quota_us
- # echo 100000 > /cgroup/cpu/red/cpu.cfs_period_us
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。