![시스템 메모리 제한 사용자 인스턴스가 작동하지 않습니다.](https://linux55.com/image/143593/%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EC%A0%9C%ED%95%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EA%B0%80%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
저는 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