• 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

  • 相关阅读:
    Dump 文件生成与分析
    打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释
    GridView编辑删除操作
    google域名邮箱申请 gmail域名邮箱申请(企业应用套件)指南
    nvl,空时的推断和取值
    如何将图片保存至自定义分组
    Java实现 蓝桥杯VIP 算法训练 集合运算
    Java实现 蓝桥杯VIP 算法训练 瓷砖铺放
    Java实现 蓝桥杯VIP 算法训练 瓷砖铺放
    Java实现 蓝桥杯VIP 算法训练 集合运算
  • 原文地址:https://www.cnblogs.com/guoxianqi2020/p/14034572.html
Copyright © 2020-2023  润新知