[root@docker1 docker]# yum search cgroup
libcgroup-tools.x86_64 : Command-line utility programs, services and daemons for libcgroup
libcgroup.i686 : Library to control and monitor control groups
libcgroup.x86_64 : Library to control and monitor control groups
[root@docker1 docker]# yum install libcgroup-tools.x86_64 -y
主机内存控制
[root@docker1 memory]# pwd
/sys/fs/cgroup/memory
[root@docker1 memory]# mkdir x1
[root@docker1 memory]# cd x1
[root@docker1 x1]# ls
在这个目录/sys/fs/cgroup/memory创建新的目录,新目录里面的内容都是从父级继承过来的
内存没有被限制
[root@docker1 x1]# cat memory.limit_in_bytes
9223372036854771712
写个200M
[kiosk@foundation38 Pictures]$ bc
1024*2024*200
209715200
修改内核参数最好不要用vim,用非交互式最好
[root@docker1 x1]# echo 209715200 > memory.limit_in_bytes
控制了物理内存是200M
物理内存的一半挂载
[root@docker1 x1]# df
tmpfs 1023468 0 1023468 0% /dev/shm
可用内存1657
[root@docker1 x1]# cd /dev/shm/
[root@docker1 shm]# free -m
total used free shared buff/cache available
Mem: 1998 167 1389 16 441 1657
Swap: 2047 0 2047
[root@docker1 shm]# dd if=/dev/zero of=bigfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.026936 s, 3.9 GB/s
[root@docker1 shm]# free -m
total used free shared buff/cache available
Mem: 1998 168 1289 116 541 1557
Swap: 2047 0 2047
[root@docker1 shm]# ls
bigfile
[root@docker1 shm]# rm -f bigfile
[root@docker1 shm]# free -m
total used free shared buff/cache available
Mem: 1998 169 1388 16 441 1656
Swap: 2047 0 2047
设置是限制200M,现在300M也可以,因为没有用x1控制
你是超户
[root@docker1 shm]# id
uid=0(root) gid=0(root) groups=0(root)
-g告诉调用那个子系统
[root@docker1 shm]# dd if=/dev/zero of=bigfile bs=1M count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 0.0822333 s, 3.8 GB/s
依然可以,因为使用了swap
[root@docker1 shm]# cgexec -g memory:x1 dd if=/dev/zero of=bigfile bs=1M count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 0.128756 s, 2.4 GB/s
[root@docker1 shm]# free -m
total used free shared buff/cache available
Mem: 1998 170 1188 214 640 1456
Swap: 2047 102 1945
–memory-swap内存加swap一共200MB,–memory的话物理内存不够用就会写入swap
操作系统能够用物理内存就用物理内存,不够用的话才用交换分区,(swap一般是内存的一半),操作系统本身机制,当物理内存被耗尽的时候swap可以提供应急响应,加速硬件和用户的响应,避免操作系统卡死(swap意义)
但是有问题,一旦数据交互到swap时候(磁盘),它的io会直线下降,如果应用需要高速的内存支持,就尽量不用swap,给它足量的内存。一般操作系统为了保护内存的使用,通常不会让你把所有内存耗尽,通常会保留,可以修改内核选项让它更加亲和内存
这个时候swap加内存一共200M,物理内存就200M了,其实没用swap
[root@docker1 shm]# cd /sys/fs/cgroup/memory/x1
[root@docker1 x1]# cat memory.limit_in_bytes
209715200
[root@docker1 x1]# echo 209715200 > memory.memsw.limit_in_bytes
物理内存占用200M,swap没有被占用
只能写200M
[root@docker1 x1]# cd /dev/shm/
[root@docker1 shm]# cgexec -g memory:x1 dd if=/dev/zero of=bigfile bs=1M count=300
Killed
[root@docker1 shm]# free -m
total used free shared buff/cache available
Mem: 1998 168 1188 215 641 1456
Swap: 2047 0 2047
因为dd不占用后端进程,如果有进程运行,将进程的Pid放在tasks,子系统x1会自动控制该进程
[root@docker1 shm]# cd /sys/fs/cgroup/memory/x1
[root@docker1 x1]# cat tasks