Docker關於cpu,記憶體,硬碟的管理
阿新 • • 發佈:2019-01-11
docker所建立的容器使用cgroup來分配資源
[[email protected] ~]# cd /
[[email protected] /]# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
#預設是看不到cgroup這個目錄的。
yum install -y libcgroup
/etc/init.d/cgconfig start #開啟之後會出現cgroup這個目錄
[[email protected] /]# ls
bin cgroup etc lib lost+found mnt proc sbin srv tmp var
boot dev home lib64 media opt root selinux sys usr
cpu的控制
vim /etc/cgconfig.conf group x1 { cpu { cpu.shares = 100; #表示子控制優先順序為100 } } [[email protected] cgroup]# /etc/init.d/cgconfig resart #在cpu.shares檔案中,可以對程序排程程式所處理的程序組設定CPU時間分配的比重
cat cpu.shares
100
由圖片可以看見父控制的cpu時間分配值為1024,子控制的cpu時間分配值為100
給server4新增兩個cpu:
使用 lscpu 可以用來檢視cpu個數
測試兩個cu的使用情況:
[[email protected] ~]# dd if=/dev/zero of=/dev/null &
只有一個cpu正在被使用
[[email protected] ~]# dd if=/dev/zero of=/dev/null &
此時可以看見兩個cpu同時工作,各自處理一條請求。
此時主機總共兩顆cpu,其中cpu0為原本的cpu,cpu1為新新增的cpu,新新增的cpu依次命名,其中,新增的cpu是可以停用的
可以看見新新增cpu預設是開啟的。
此時執行兩條命令:dd if=/dev/zero of=/dev/null &
可以看見:
兩條命令分別執行在一個cpu上。
停用cpu1,再次top檢視:
可以發現兩條命令在同一個cpu上執行。
檢視子控制組x1對cpu0的控制:
關掉cpu1,可以看見使用子控制來管理執行在cpu上的服務時,cpu時間分配值小的佔用cpu更少
凍結程序:
有些程序對cpu的消耗特別大,但是又不能kill掉,避免對其他程序的影響,應該凍結。
vim /etc/cgconfig.conf
group x1 {
freezer {
}
}
[[email protected] cgroup]# /etc/init.d/cgconfig resart
凍結程序:
可以看見程序凍結後,不再消耗cpu資源。
使用命令:ps ax 可以看見程序被凍結:
對記憶體的控制
分離出200M記憶體進行控制演示:
vim /etc/cgconfig
group x1 {
cpu {
cpu.shares = 100;
}
memory {
memory.limit_in_bytes = 209715200; #指定控制的記憶體大小為200M,如果只有此引數,在使用控制的記憶體超過200M時,會使用swap分割槽來頂替
memory.memsw.limit_in_bytes = 209715200; #限制所控制的記憶體和swap分割槽全部加起來為200M
}
}
[[email protected] ~]# /etc/init.d/cgconfig restart
[[email protected] ~]# cd /dev/shm/ #一定要在此目錄下執行以下命令
可以看出未使用子控制系統x1時,可以隨意的耗費記憶體。
使用x1控制時,可以看出最多耗費的記憶體不能超過200M。
利用記憶體控制對應用的訪問:
cpu {
cpu.shares = 100;
}
memory {
memory.limit_in_bytes = 20480000;
memory.memsw.limit_in_bytes = 20480000;
}
}
[[email protected] ~]$ vim /etc/cgrules.conf
ly:memapp2 memory x1/
ly:memapp1 memory x1/
[[email protected] ~]$ /etc/init.d/cgconfig restart
[[email protected] ~]$ /etc/init.d/cgred restart
#本地測試
[[email protected] shm]# cgexec -g memory:x1 /home/ly/memapp2
Process ID is: 1147
Grabbing 8192 pages of memory
Killed
[[email protected] shm]# cgexec -g memory:x1 /home/ly/memapp1
Process ID is: 1148
Grabbing 4096 pages of memory
Success!
#切換到使用者
[[email protected] shm]# su - ly
[[email protected] ~]$ ./memapp1
Process ID is: 1169
Grabbing 4096 pages of memory
Success!
Press any key to exit
[[email protected] ~]$ ./memapp2
Process ID is: 1170
Grabbing 8192 pages of memory
Killed