ऐसा लगता है कि आधिकारिक तौर पर समर्थित तरीका नहीं है। (यह गलत है। नीचे देखें)
एक आधिकारिक रूप से हतोत्साहित तरीका (क्योंकि यह 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