다수의 사람들이 공동으로 사용하는 시스템, 여러 프로세스들이 돌아가는 서버라면 특정 사용자나 특정 프로세스가 자원을 독점하여 다른 작업에 지장이 생기는 문제에 대해 민감하다.
systemd version >= v240
: 2018.12 releasesystemd.unified_cgroup_hierarchy=1
을 넣어야한다.systemd version < v241
는 default로 CGroup v1 사용함을 주의systemd version v241
부터는 default CGroup v2, 해당 버전 이후로는 커널 옵션 필요없음systemd --version
결과 245
로 나옴systemd.resource-control(5) man page
see more featuresMemoryHigh
MemoryMax
TasksMask
사용 예:
$ sudo systemctl set-property <NAME> MemoryHigh=3G MemoryMax=4G
$ sudo systemctl --runtime set-property <NAME> MemoryHigh=3G MemoryMax=4G
systemd-cgls
: systemd 계층확인$ systemd-cgls
-.slice
로 부터 모든 프로세스가 시작.slice, .service, .scope
에 리소스 제한 걸수 있다.systemctl
에 --runtime
옵션을 주면, 리부팅시 걸었던 옵션 사라진다.
system.slice
에 뭐가 많이 달려 있는데 한번 확인해보자.
메모리 제한을 위해서는 systemctl의 set-property명령을 사용한다.
$ sudo systemctl --runtime set-property user.slice MemoryHigh=3G MemoryMax=4G
설정 후,
$ sudo systemctl status user.slice
systemd-cgls
에서 user-UID.slice에 자원 제한걸면 되는데..$ sudo systemctl --runtime --force edit user-.slice
$ sudo systemctl status user-1000.slice
$ sudo systemctl revert <NAME>
$ sudo systemctl revert user.slice
$ sudo systemctl revert user-1000.slice