저는 Arch Linux를 사용하고 있으며 systemd 버전은 239입니다. systemd.unified_cgroup_hierarchy=1 커널 매개변수를 사용하여 시스템을 부팅합니다.
Limit.slice와 malloc.service라는 두 개의 유닛 파일을 만들었습니다.
Limit.slice는
[Unit]
Description=limit memory slice.
[Slice]
MemoryAccounting=yes
MemoryMax=100M
malloc.service는
[Unit]
Description=memory consuming process
[Service]
ExecStart=/home/example/malloc_program
Slice=limit.slice
malloc_program은 메모리를 소비하기 위해 계속 malloc()을 호출합니다.
이 파일들을 /home/example/.config/systemd/user/에 넣고 실행했습니다 systemctl --user start malloc.service
. 서비스의 CGroup이 예상보다 낮습니다 limit.slice
.
CGroup: /user.slice/user-1000.slice/[email protected]/limit.slice/malloc.service
그러나 100MB 이상의 메모리를 사용해도 프로세스는 계속 실행됩니다.
사용자 인스턴스에서 메모리 제한이 작동하지 않는 이유를 이해할 수 없습니다 ...
답변1
.slice 파일에서 malloc 서비스를 설정해 보세요.
[Slice]
MemoryAccounting=true
MemoryLimit=100M
MemoryMax=100M
MemoryHigh=50M