• 登录节点cgroup限制CPU和内存


    1. 背景

    业务集群提供了几个供用户登陆的Linux服务器。用户除了能够做正常的文件操作以外,还能够编译和提交远程计算。但是用户有的喜欢或者无意识地使用本地(即登录节点)进行计算(使用登录节点CPU和内存),对于共享的资源来说,这是对我们业务系统和其他用户的“伤害”

    因此迫切需要对用户可使用资源进行限制。限制的技术也就是Linux内核机制Cgroup

    2. 操作

    2.1 查看cgroup是否可用

    登录节点,通过service cgconfig status查看cgroup机制已经启动,挂载点为/cgroup目录。

    2.2 配置限制脚本

    因为登录的用户过多,所以直接针对用户的程序进行限制。首先创建一个限制脚本,如下:

    #!/bin/bash
    
    # 1. mkdir sub-system
    CPU_CGROUP=/cgroup/cpu/$(hostname)
    MEM_CGROUP=/cgroup/memory/$(hostname)
    
    mkdir -p ${CPU_CGROUP} ${MEM_CGROUP}
    
    # 2. write file
    CPU_LIMIT=${CPU_CGROUP}/cpu.cfs_quota_us
    MEM_SW_LIMIT=${MEM_CGROUP}/memory.memsw.limit_in_bytes
    MEM_LIMIT=${MEM_CGROUP}/memory.limit_in_bytes
    CPU_TASK=${CPU_CGROUP}/tasks
    MEM_TASK=${MEM_CGROUP}/tasks
    
    # 3. set num
    #6 core
    CPUNUM=600000
    #10G
    #MEMNUM=31897681920
    MEMNUM=10737418240
    MEMSWNUM=10737418240
    echo ${CPUNUM} > ${CPU_LIMIT}
    echo ${MEMNUM} > ${MEM_LIMIT}
    echo ${MEMSWNUM} > ${MEM_SW_LIMIT}
    
    # 4. work
    for user in $(/usr/bin/who|grep -v root|awk '{print $1}'|sort|uniq)
    do
    
    	for pid in $(/usr/bin/pgrep -u ${user})
    	do
    		echo ${pid} >> ${CPU_TASK} 2>/dev/null
    		echo ${pid} >> ${MEM_TASK} 2>/dev/null
    	done
    done	
    

    上述脚本主要包括:

    • 设置可用CPU资源
    • 设置可用内存(交换分区)资源
    • 遍历用户程序pid,然后设置不同pid可用CPU

    2.3 创建定时任务

    在登录节点执行crontab -e,内容:

    */1 * * * * /bin/bash /root/cgroup_limit.sh
    

    3 . 测试

    分别测试计算密集型和内存耗费型脚本,可以查看设置结果,CPU限制在6个核心使用,而超出10G内存,会被OOM

  • 相关阅读:
    GAMIT中遇到的错误
    bash: ./install_software: Permission denied
    xmanager无法加载远程桌面
    GMT的安装
    小总结:Gamit中常见常用命令
    动态分配指针数组(以解决)
    Gamit使用gftp软件下载数据
    Python基础(1)
    JAVA中关于多线程的理解
    JAVA 基本绘图——利用JFrame JPanel 绘制扇形
  • 原文地址:https://www.cnblogs.com/liwanliangblog/p/13260240.html
Copyright © 2020-2023  润新知