一些 snap(比如 Slack)会消耗几乎无限量的内存。在前 Slack 后 systemd 世界中,我可以创建一个命名空间,限制它的内存/CPU 等……并通过在该命名空间内执行它来强制 Slack 不消耗世界。
为 Snap 软件包添加类似限制的正确方法是什么?由于 snap 已经在某些 cgroup 魔法中执行,我希望它像 asnap modify <snappackage> -addmemlimit 1G
或类似的东西一样简单。
答案1
这是可能的,但实验性的,通过使用配额组功能。您必须创建一个具有资源限制的配额组(目前,只有内存资源限制可用),并将一个或多个快照附加到该配额组:
- 启用实验性功能:
snap set system experimental.quota-groups=true
- 创建带有快照的配额组:
snap set-quota --memory=4GB memlimit firefox
来源 :https://snapcraft.io/docs/quota-groups
编辑 : 现在它不再是一个实验性功能,文档指出配额组适用于仅限 snap 服务。
因此,想要限制 Firefox 等系统资源访问的人应该使用setrlimit()
例如限制进程的数据段大小。非编程方式包括:
- 使用 bash 原语
ulimit
对 shell 进程设置限制,从该 shell 启动的所有程序都会继承这些限制。例如,将数据段大小限制为 4 GiB:ulimit -d 4194304
- 使用
prlimit
命令启动程序,目的相同。仍然是 4 GiB 数据段大小限制的相同示例:prlimit -d=4294967296 firefox
另一种选择是直接使用与系统快照相同的功能:cgroups(快照的情况下为 v2)。