답변:
공식적으로 지원되는 방법은 없습니다. (이것은 정확하지 않습니다. 아래를보십시오) 공식적으로 권장하지 않는 방법 (cgroup을 조작하기 때문에)은 다음과 같습니다.
다음 파일을 다음과 같이 만드십시오. /etc/systemd/system/user@.service.d/set-memhigh.conf
[Service]
Type=simple
ExecStartPost=+/root/set-memoryhigh.sh %i
다음 파일을 "/root/set-memoryhigh.sh"로 만드십시오.
#!/bin/bash
exec >>/var/tmp/log.txt 2>&1 # for logging
set -x # for logging
for d in /sys/fs/cgroup /sys/fs/cgroup/user.slice /sys/fs/cgroup/user.slice/user-$1.slice; do
echo "+memory" >>${d}/cgroup.subtree_control
done
/bin/echo "24G" >> /sys/fs/cgroup/user.slice/user-$1.slice/memory.high
다음을 실행하여 작동하는지 확인할 수 있습니다.
cat /sys/fs/cgroup/user.slice/user-${UID}.slice/memory.high
"/sys/fs/cgroup/user.slice"가 없으면 통합 cgroup 계층이 활성화되지 않은 것입니다. https://unix.stackexchange.com/a/452728/297666 으로 활성화해야합니다.
그것은 효과가 있지만, 당신이 이것을 좋아하는지 확실하지 않습니다 ...
7 월 25 일 추가 된 참고 사항 : 각 사용자 /etc/systemd/system/user-1000.slice
에 대해 다음 파일을 만들면 (사용자 UID로 1000을 대체 함) 해당 사용자에 대한 메모리 제한이 적용됩니다. 나는 systemd에 그것을 확인 237 systemd와 우분투 18.04 데비안 strecth에 237 스트레치 백 포트에서 설치 :
[Slice]
Slice=user.slice
MemoryHigh=24G
불편한 점은 각 사용자 마다 위의 파일을 만들어야한다는 것 입니다. systemd 239 를 사용하면 위의 파일을 그대로 만들 수 /etc/systemd/system/user-.slice.d/memory.conf
있으며 모든 사용자에게 메모리 제한이 부과됩니다. 그러나 systemd 239에 버그가 있으며 (240에서 수정되었습니다) 의도 한대로 작동하지 않습니다. 버그를 해결하려면 다음 파일을 다음과 같이 user-0.slice
만들고 실행하십시오 systemctl enable user-0.slice
. 각 사용자마다 다음 파일을 만들 필요는 없습니다 .
[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target