11월23일 - (실습) cgroup으로 Anti Virus 앱 CPU 사용량 제한하기
시나리오
- 새벽 2시에 주기적으로 데이터 베이스 서버 응답 성능이 크게 증가, 원인 분석 결과 Anti Virus 앱의 주기적인 수행 작업에 영향을 받은 것을 확인
실습
- stress tool로 cpu 로드를 생성 -> cpu 사용량 10% 제한
스트레스 툴 설치
sudo apt update
sudo apt install -y stress
cgroup 속성 변경
mkdir utils로 dir 새로 만들었는데 안에 내용이 있음.
컨트롤 제어에 필요한 cpu와 관련된 컨트롤 제어에 필요한 각종 값들이 세팅 되어 있다.
실제 파일은 아니고 pseudo 파일임.
이 값들을 조절하면서 테스트를 할 수 있다.
프로세스를 등록하기 위해 테스크에 값을 써주면 된다.
# root로 변경
sudo su
# cgroup 폴더로 이동 및 cpu 속성
cd /sys/fs/cgroup/cpu
# 새로운 컨트롤 그룹 만들기
mkdir utils
# 오 신기하다. 방금 dir 새로 만들었는데 안에 내용이 있음.
cd utils
# tasks에 해당 프로세스를 넣음
echo $$ > tasks
현재 연결된 프로세스 아이디 확인
echo $$
cat tasks를 하면 아무것도 없음. 여기에 프로세스 아이디 넣기
echo $$ >> tasks
stresstool로 period, quota를 설정
period는 기본적으로 100ms = 100000
quota는 10000(10ms)
이러면 10%가 설정됨.
period 값 확인
cat cpu.cfs_period_us
quota 세팅하기
echo 10000 > cpu.cfs_quota_us
다른 쉘로 이동하면 안된다.
자식 프로세스는 해당 컨트롤 그룹의 부모 컨트롤 그룹의 상속을 받아가기 때문에 해당 쉘에서 스트레스 명령을 실행해야 함.
스트레스 주기
위의 설정을 안하면 cpu 사용량이 100%로 나온다.
stress -c 1
top 명령어로 cpu 사용량을 살펴보면 10.0인 것을 볼 수 있다.
이 값은 동적으로 변경이 가능하다.
새 터미널 열어서 quota 값을 변경해보자.
cd /sys/fs/cgroup/cpu/utils/
10000으로 된 값을 5000으로 변경하자.
cpu 사용량을 5%로 제한하였다.
echo 5000 > cpu.cfs_quota_us
다시 이전 터미널에서 top을 살펴보자.
이전에 top을 실행한 터미널에서 다시 확인하면 5%로 나오는 것을 확인할 수 있다.
어떤 장애들로 인해서 CPU 사용량이 증가할 수 있는데 이렇게 구성에 따라 c 그룹을 이용해서 안전하게 제한을 걸 수 있다.