सभी उपयोगकर्ताओं के लिए एक तयशुदा संसाधन सीमा तय करें जिसमें सिस्टमग्रुप समूह हैं


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 के रूप में सक्षम करना होगा

हालांकि यह काम करता है, मुझे यकीन नहीं है कि अगर आपको यह पसंद है ...

25 जुलाई को जोड़ा गया नोट: प्रत्येक उपयोगकर्ता के /etc/systemd/system/user-1000.sliceलिए निम्न फ़ाइल बनाना (उपयोगकर्ता के यूआईडी द्वारा 1000 की जगह) उस उपयोगकर्ता पर एक मेमोरी सीमा लगाता है। मैं systemd पर यह सत्यापित 237 ubuntu 18.04 और डेबियन strecth पर systemd के साथ 237 खिंचाव-backports से स्थापित:

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

असुविधा यह है कि हमें प्रत्येक उपयोगकर्ता के लिए उपरोक्त फ़ाइल बनानी होगी। सिस्टमड 239 के साथ , हम उपरोक्त फाइल को बना सकते हैं /etc/systemd/system/user-.slice.d/memory.confऔर मेमोरी लिमिट हर उपयोगकर्ता पर लगाई गई है। लेकिन सिस्टम 239 में एक बग है (यह बग 240 में सही किया गया था) और यह इरादा के अनुसार काम नहीं करता है। बग के चारों ओर काम करने के लिए, निम्न फ़ाइल को इस रूप में बनाएं user-0.sliceऔर चलाएँ systemctl enable user-0.slice। हमें प्रत्येक उपयोगकर्ता के लिए निम्न फ़ाइल बनाने की आवश्यकता नहीं है।

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

यह इस बीच एक सभ्य वर्कअराउंड की तरह दिखता है, लेकिन मैं एक अधिक आधिकारिक संस्करण के लिए पकड़ लूंगा।
काई

1
@kai मुझे मेमोरी लिमिटेशन के आधिकारिक तरीके मिले और उन्होंने मुझे अपने उत्तर में जोड़ दिया। आशा है कि यह उपयोगी है।
रायुटारोह मात्सुमोतो

1
मैं इसका परीक्षण करूंगा, लेकिन यह ठीक वैसा ही दिखता है, जैसा मुझे चाहिए (उस बग को छोड़कर)
काई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.