Đặt giới hạn tài nguyên mặc định cho tất cả người dùng có nhóm hệ thống


9

Tôi có thể đặt giới hạn bộ nhớ cho người dùng như vậy:

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

Có cách nào để áp dụng cho tất cả người dùng không? Tôi muốn mỗi người dùng nhận được 24G, không phải tổng cộng 24G cho tất cả các quy trình của người dùng (mà tôi nghĩ sẽ là kết quả của việc cài đặt user.slicetrực tiếp).

Câu trả lời:


7

Dường như không có cách hỗ trợ chính thức để làm điều đó. (Điều này không chính xác. Xem phía dưới) Một cách chính thức được khuyến khích (vì nó thao túng nhóm) như sau:

Tạo các tập tin sau như /etc/systemd/system/user@.service.d/set-memhigh.conf

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

Sau đó tạo tệp sau đây là "/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

Bạn có thể xem nó có hoạt động hay không bằng cách chạy

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

Nếu "/sys/fs/cgroup/user.slice" không tồn tại, thì hệ thống phân cấp cgroup hợp nhất không được bật. Chúng tôi phải kích hoạt nó dưới dạng https://unix.stackexchange.com/a/452728/297666

Mặc dù nó hoạt động, tôi không chắc bạn có thích điều này không ...

Lưu ý được thêm vào ngày 25 tháng 7: Tạo tệp sau đây /etc/systemd/system/user-1000.slicecho mỗi người dùng (thay thế 1000 bằng UID của người dùng) áp đặt giới hạn bộ nhớ cho người dùng đó. Tôi đã xác minh nó trên systemd 237 trên ubfox 18.04 và Debian strecth với systemd 237 được cài đặt từ các bản sao lưu kéo dài:

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

Sự bất tiện là chúng tôi phải tạo tệp trên cho mỗi người dùng. Với systemd 239 , chúng ta có thể tạo tập tin trên /etc/systemd/system/user-.slice.d/memory.confvà giới hạn bộ nhớ được áp dụng cho mọi người dùng. Nhưng có một lỗi trong systemd 239 (lỗi này đã được sửa trong 240) và nó không hoạt động như dự định. Để khắc phục lỗi, tạo tệp sau user-0.slicevà chạy systemctl enable user-0.slice. Chúng tôi không phải tạo tệp sau cho mỗi người dùng.

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

Điều này có vẻ như một cách giải quyết tốt trong thời gian này, nhưng tôi sẽ giữ phiên bản chính thức hơn.
kai

1
@kai Tôi tìm thấy những cách chính thức để giới hạn bộ nhớ và thêm chúng vào câu trả lời của tôi ở trên. Hy vọng nó hữu ích.
Ryutaroh Matsumoto

1
Tôi sẽ kiểm tra nó, nhưng nó trông giống hệt những gì tôi cần (ngoại trừ lỗi đó)
kai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.