限制 Snap 包的内存

限制 Snap 包的内存

一些 snap(比如 Slack)会消耗几乎无限量的内存。在前 Slack 后 systemd 世界中,我可以创建一个命名空间,限制它的内存/CPU 等……并通过在该命名空间内执行它来强制 Slack 不消耗世界。

为 Snap 软件包添加类似限制的正确方法是什么?由于 snap 已经在某些 cgroup 魔法中执行,我希望它像 asnap modify <snappackage> -addmemlimit 1G或类似的东西一样简单。

答案1

这是可能的,但实验性的,通过使用配额组功能。您必须创建一个具有资源限制的配额组(目前,只有内存资源限制可用),并将一个或多个快照附加到该配额组:

  1. 启用实验性功能:snap set system experimental.quota-groups=true
  2. 创建带有快照的配额组: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)。

相关内容