systemd cgroup을 사용하여 모든 사용자에 대한 기본 리소스 제한 설정

systemd cgroup을 사용하여 모든 사용자에 대한 기본 리소스 제한 설정

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

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

모든 사용자에게 적용할 수 있는 방법이 있나요? 모든 사용자 프로세스에 대해 총 24G가 아닌 각 사용자가 24G를 얻도록 하고 싶습니다( user.slice직접 설정한 결과일 것이라고 생각했습니다).

답변1

공식적으로 지원되는 방법은 없는 것 같습니다.(틀렸습니다. 하단 참조) cgroup을 조작하기 때문에 공식적으로 권장되지 않는 한 가지 방법은 다음과 같습니다.

다음 파일을 다음으로 설정합니다./etc/systemd/system/[email protected]/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파일을 만드세요user(1000을 사용자의 UID로 대체)는 이 사용자에게 메모리 제한을 부과합니다. systemd에서 확인했어요237화우분투 18.04 및 데비안 strecth에서 systemd 사용237화스트레치 백포트에서 설치:

[Slice]
Slice=user.slice
MemoryHigh=24G

불편한 점은 위의 파일을 다음과 같이 만들어야 한다는 것입니다.사용자. 시스템으로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

관련 정보