私はArch Linuxを使用しており、systemdバージョンは239です。 systemd.unified_cgroup_hierarchy = 1カーネルパラメータを使用してシステムを起動します。
Limit.sliceとmalloc.serviceという2つのユニットファイルを作成しました。
Limit.sliceは
[Unit]
Description=limit memory slice.
[Slice]
MemoryAccounting=yes
MemoryMax=100M
malloc.serviceは
[Unit]
Description=memory consuming process
[Service]
ExecStart=/home/example/malloc_program
Slice=limit.slice
malloc_programは、メモリを消費するためにmalloc()を呼び出します。
これらのファイルを/home/example/.config/systemd/user/に入れて実行しましたsystemctl --user start malloc.service
。サービスのCGroupが予想より低いですlimit.slice
。
CGroup: /user.slice/user-1000.slice/[email protected]/limit.slice/malloc.service
ただし、100 MB 以上のメモリを使用してもプロセスは実行され続けます。
ユーザーインスタンスでメモリ制限が機能しない理由を理解できません...
答え1
.sliceファイルでmallocサービスを設定してみてください。
[Slice]
MemoryAccounting=true
MemoryLimit=100M
MemoryMax=100M
MemoryHigh=50M