Cgroup
server1.example.com 172.25.23.1 rhel6.5
Iptables selinux disabled
1.安装,启动软件
yum insatll libcgroup -y
/etc/init.d/cgconfig start
2.内存限制
ls /cgroup/# 可查看所有可以用的限制
ls /cgroup/memory # 查看memory可用到的限制
cat /cgroup/memory/memory.limit_in_bytes
---> 9223372036854775807# 内存限制字节数
(1) 修改配置文件
vim /etc/cgconfig.conf
添加:
group x1 {
memory {
memory.limit_in_bytes=209715200
}
}
200*1024*1024=209715200# 限200M
/etc/init.d/cgconfig restart
(2) 测试
dd if=/dev/zero of=bigfile bs=1M count=300
显示仍然可以成功截取,这是因为当内存占满后,系统会继续存储在swap下,所以,我们还需要限制swap
(3) 补充配置文件
vim /etc/cgconfig.conf
修改:
group x1 {
memory {
memory.limit_in_bytes=209715200;
Memory.memsw.limit_in_bytes=209715200;
}
}
/etc/init.d/cgconfig restart
(4) 重新测试
cgexec -g memory:x1 dd if=/dev/zero of=bigfile bs=1M count=300
会显示Killed
(5) 执行脚本的内存限制
a) 下载脚本 memapp1 memapp2
两个均为 4096 pages of memory (1个pages of memory = 4字节)
加执行权限,现令memapp1可以执行,memapp2不可以
4096*4*1024=16777216
b) vim /etc/cgconfig.conf
修改:
group x1 {
memory {
memory.limit_in_bytes=16777216;
Memory.memsw.limit_in_bytes=16777216;
}
}
/etc/init.d/cgconfig restart
c) vim /etc/cgrules.conf
添加:
*:memapp1 memory x1/
*:memapp2 memory x1/
限制任何人在执行这两个脚本时,都遵循x1里的限制
/etc/init.d/cgred restart
d) 测试
3. CPU限制
查询CPU限制的方法和memory相同
本次实验限制cpu.shares
(1) 查看信息(优先级)
cat /cgroup/cpu/cpu.shares
1024
(2) 修改配置文件
vim /etc/cgconfig.conf
修改:
group x2 {
cpu {
cpu.shares=100;
}
}
优先级设为100,小于默认的
/etc/init.d/cgconfig restart
(3) 测试
a)若为2个CPU,则关掉一个,不然的话,每个CPU则执行一个任务,没有对比性
cd cpu/cpu1 (cpu0不可以关掉,里面都没有online的选择)
cat online
---> 1
echo 0 > online即为关掉cpu1
b) dd if=/dev/zero of=/dev/null &
dd if=/dev/zero of=/dev/null &
top
可看到2个进程在均衡的占用CPU
cgexec -g cpu:x2 dd if=/dev/zero of=/dev/null &
top
只有一个进程时,则基本占满
cgexec -g cpu:x2 dd if=/dev/zero of=/dev/null &
dd if=/dev/zero of=/dev/null &
top
可看到分配的CPU资源不同,这是因为优先级不同了
4. IO限制
查询可限制IO参数的如memory
本次实验限制的是读取速度
(1) 查看所限制设备的类型
ll /dev/vda为252
ll /dev/sda 为8
(2) 修改配置文件
vim /etc/cgconfig.conf
添加:
group x3 {
blkio {
Blkio.throttle.read_bps_device=”252:0 1024000”;
}
}
/etc/init.d/cgconfig restart
(3) 测试
cgexec -g blkio:x3 dd if=/dev/vda of=/dev/null
会发现读取速度便慢很多
5. 限制 freezer
(1) 修改配置文件
vim /etc/cgconfig.conf
添加:
group x4 {
freezer {
}
}
/etc/init.d/cgconfig restart
(2) 冻结任务
cd /cgroup/freezer/x4
echo 7952 > tasks
cat freezer.state
---> THAWED 活跃状态
FROZEN 冻结状态
echo FROZEN > freezer.state
会发现7592任务被冻结了,但是任务还在进行中,像CPU等都还在运转
以上操作来自老师课堂所讲