Linux内存参数

[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

Linux内存参数_第1张图片
在这个目录/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 

你可能感兴趣的:(docker,linux,bash,运维)