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

 

posted @ 2020-11-25 10:38  guoxianqi  阅读(1959)  评论(0编辑  收藏  举报