ตั้งค่าขีด จำกัด ทรัพยากรเริ่มต้นสำหรับผู้ใช้ทั้งหมดที่มีกลุ่ม systemd


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สำหรับผู้ใช้แต่ละราย (แทนที่ 1,000 ด้วย UID ของผู้ใช้) กำหนดข้อ จำกัด หน่วยความจำให้กับผู้ใช้นั้น ฉันตรวจสอบมันบน systemd 237บน Ubuntu 18.04 และ Debian strecth พร้อมกับ systemd 237 ที่ติดตั้งจากการยืด backport:

[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

ดูเหมือนว่าวิธีแก้ไขปัญหาที่เหมาะสมในระหว่างนี้ แต่ฉันจะขอรุ่นที่เป็นทางการมากขึ้น
ไก่

1
@kai ฉันพบวิธีทางการในการ จำกัด หน่วยความจำและเพิ่มคำตอบของฉันด้านบน หวังว่ามันจะมีประโยชน์
Ryutaroh Matsumoto

1
ฉันจะทดสอบออก แต่ลักษณะเช่นนี้สิ่งที่ฉันต้องการ (ยกเว้นข้อผิดพลาดที่)
ไก่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.