Cgroup(三)memory和pids子系統


一、memory子系統

1、memory子系統的作用
  • 限制memory(含匿名和文件映射,swap cache)
  • 限制swap+memory
  • 顯示cgroup的內存信息
  • 為每個cgroup設置softlimit
 
2、文件解釋
cgroup.event_control #用於eventfd的接口
memory.usage_in_bytes #顯示當前已用的內存
memory.limit_in_bytes #設置/顯示當前限制的內存額度
memory.failcnt #顯示內存使用量達到限制值的次數
memory.max_usage_in_bytes #歷史內存最大使用量
memory.soft_limit_in_bytes #設置/顯示當前限制的內存軟額度
memory.stat #顯示當前cgroup的內存使用情況
memory.use_hierarchy #設置/顯示是否將子cgroup的內存使用情況統計到當前cgroup里面
memory.force_empty #觸發系統立即盡可能的回收當前cgroup中可以回收的內存
memory.pressure_level #設置內存壓力的通知事件,配合cgroup.event_control一起使用
memory.swappiness #設置和顯示當前的swappiness
memory.move_charge_at_immigrate #設置當進程移動到其他cgroup中時,它所占用的內存是否也隨着移動過去
memory.oom_control #設置/顯示oom controls相關的配置
memory.numa_stat #顯示numa相關的內存
 
3、設置用戶內存
memory.limit_in_bytes:限制memory的大小
memory.memsw.limit_in_bytes:限制swap+memory的大小
當memory.limit_in_bytes==memory.memsw.limit_in_bytes時表示cgroup不使用swap
 
1)設置memory.limit_in_bytes和memory.memsw.limit_in_bytes的限定值為50M,此時不會使用swap
# cd /sys/fs/cgroup/memory
# mkdir mem
# echo 50M >mem/memory.limit_in_bytes 
# echo 50M >mem/memory.memsw.limit_in_bytes 
# more mem/memory.limit_in_bytes 
52428800
# more mem/memory.memsw.limit_in_bytes
52428800

2)將當前bash設置到tasks中,並嘗試使用dd命令創建一個100M的文件,此時會觸發OOM-killer機制

# echo $$ >mem/tasks 
# dd if=/dev/zero of=/tmp/testfile bs=100M count=1    
Killed
# more mem/memory.max_usage_in_bytes   使用內存
52428800
# more mem/memory.memsw.max_usage_in_bytes 
52428800

二、pids子系統

1、pid子系統作用
能是限制cgroup及其所有子孫cgroup里面能創建的總的task數量。
pids.current: 表示當前cgroup及其所有子孫cgroup中現有的總的進程數量
pids.max: 當前cgroup及其所有子孫cgroup中所允許創建的總的最大進程數量,在根cgroup下沒有這個文件,原因顯而易見,因為我們沒有必要限制整個系統所能創建的進程數量。
2、限制進程數
# mount|grep pids
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
# cd /sys/fs/cgroup/pids/
# mkdir test
# mkdir test
# cd test/
# ls -l
total 0
-rw-r--r-- 1 root root 0 Nov 23 16:18 cgroup.clone_children
--w--w--w- 1 root root 0 Nov 23 16:18 cgroup.event_control
-rw-r--r-- 1 root root 0 Nov 23 16:18 cgroup.procs
-rw-r--r-- 1 root root 0 Nov 23 16:18 notify_on_release
-r--r--r-- 1 root root 0 Nov 23 16:18 pids.current
-rw-r--r-- 1 root root 0 Nov 23 16:18 pids.max
-rw-r--r-- 1 root root 0 Nov 23 16:18 tasks
#將pids.max設置為1,即當前cgroup只允許有一個進程
# echo 1 >pids.max 
#將當前bash進程加入到該cgroup
# echo $$ > cgroup.procs
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: Resource temporarily unavailable
在開一個終端
# cd /sys/fs/cgroup/pids/test
# more pids.current 
1
# more pids.max 
1
# more cgroup.procs 
1303

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM