시스템화 된 cgroup이있는 모든 사용자에 대한 기본 자원 제한 설정


9

다음과 같이 사용자의 메모리 제한을 설정할 수 있습니다.

systemctl set-property user-UID.slice MemoryHigh=24G

모든 사용자에게 적용 할 수있는 방법이 있습니까? 모든 사용자 프로세스에 대해 총 24G가 아닌 각 사용자가 24G를 갖기를 원합니다 ( user.slice직접 설정 한 결과라고 생각 합니다).

답변:


7

공식적으로 지원되는 방법은 없습니다. (이것은 정확하지 않습니다. 아래를보십시오) 공식적으로 권장하지 않는 방법 (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

이것은 그 동안 괜찮은 해결 방법처럼 보이지만 더 공식적인 버전을 제시하겠습니다.
kai

1
@kai 나는 메모리 제한에 대한 공식적인 방법을 발견하고 위의 내 대답에 추가했습니다. 유용하기를 바랍니다.
류타로 마츠모토

1
테스트 해 볼 것이지만, 이것은 내가 필요한 것 (버그를 제외하고)과 정확히 같습니다
kai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.