登錄節點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


免責聲明!

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



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