Systemd gruplarına sahip tüm kullanıcılar için varsayılan bir kaynak sınırı belirleyin


9

Böyle kullanıcılar için bir bellek sınırı ayarlayabilirsiniz:

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

Bunun tüm kullanıcılar için başvurmasının bir yolu var mı? Her kullanıcının tüm kullanıcı işlemleri için toplam 24G değil 24G almasını istiyorum (ki bu user.slicedoğrudan ayarlamanın sonucu olacağını düşünüyorum ).

Yanıtlar:


7

Bunu yapmanın resmi olarak desteklenen bir yolu yok gibi görünüyor. (Bu yanlıştır. Aşağıya bakınız) Resmi olarak cesareti kırılmış bir yol (çünkü grubu yönettiği için) aşağıdaki gibidir:

Aşağıdaki dosyayı şu şekilde yapın: /etc/systemd/system/user@.service.d/set-memhigh.conf

[Service]
Type=simple
ExecStartPost=+/root/set-memoryhigh.sh %i

Sonra aşağıdaki dosyayı "/root/set-memoryhigh.sh" olarak yapın

#!/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

Çalışıp çalışmadığını görebilirsiniz

cat /sys/fs/cgroup/user.slice/user-${UID}.slice/memory.high

"/Sys/fs/cgroup/user.slice" yoksa, birleştirilmiş grup hiyerarşisi etkinleştirilmez. Https://unix.stackexchange.com/a/452728/297666 olarak etkinleştirmemiz gerekiyor.

Çalışmasına rağmen, bunu beğenip beğenmediğinizden emin değilim ...

25 Temmuz ilave Not: Aşağıdaki dosyası oluşturma /etc/systemd/system/user-1000.sliceiçin her (kullanıcının UID ile 1000 değiştirilmesi), kullanıcı, bu kullanıcı üzerinde bir bellek sınırlama getirmektedir. Ben ubuntu 18.04 üzerinde systemd 237 ve streç backport yüklü systemd 237 ile Debian strecth doğruladı :

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

Rahatsızlık, her kullanıcı için yukarıdaki dosyayı yapmamız gerektiğidir . 239 systemd ile , yukarıdaki dosyayı şu şekilde yapabiliriz ve /etc/systemd/system/user-.slice.d/memory.confher kullanıcıya bellek sınırlaması uygulanır. Ancak 239 systemd'de bir hata var (bu hata 240'da düzeltildi) ve amaçlandığı gibi çalışmıyor. Hatayı gidermek için aşağıdaki dosyayı şu şekilde yapın user-0.sliceve çalıştırın systemctl enable user-0.slice. Her kullanıcı için aşağıdaki dosyayı yapmak zorunda değiliz .

[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target

Bu arada iyi bir geçici çözüm gibi görünüyor, ancak daha resmi bir versiyona dayanacağım.
kai

1
@kai Bellek sınırlaması için resmi yollar buldum ve bunları yukarıdaki cevabıma ekledim. Umarım faydalıdır.
Ryutaroh Matsumoto

1
Test edeceğim, ama bu tam olarak ihtiyacım olana benziyor (bu hata hariç)
kai
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.