限制 Fedora 上浏览器的内存

限制 Fedora 上浏览器的内存

我想限制所有用户的 Chromium (/bin/chromium-browser) 和 Firefox (/bin/firefox) 的内存使用量。

在迁移到 Fedora 之前,我使用 cgroups 来实现这一点。然而,我听说 Fedora 上的 cgroup 已被弃用。如何在没有 cgroup 的情况下设置 1GB RAM 限制?

编辑:我尝试过使用 cgroups 来做到这一点。

/etc/cgconfig.conf

group browsers { 
    memory { 
        memory.limit_in_bytes = 1024m;
        memory.memsw.limit_in_bytes = 1024m;
        memory.soft_limit_in_bytes = 1024m; 
    } 
}

/etc/cgrules.conf

*:/bin/chromium-browser memory browsers

但是之后

sudo service cgconfig start
systemctl status cgconfig.service

我正在接收

● cgconfig.service - Control Group configuration service
   Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sun 2018-06-24 13:41:07 CEST; 29min ago
  Process: 9239 ExecStart=/usr/sbin/cgconfigparser -l /etc/cgconfig.conf -s 1664 (code=exited, status=87)
 Main PID: 9239 (code=exited, status=87)

Jun 24 13:41:07 me systemd[1]: Starting Control Group configuration service...
Jun 24 13:41:07 me cgconfigparser[9239]: /usr/sbin/cgconfigparser; error loading /etc/cgconfig.conf: Cgroup, operation not allowed
Jun 24 13:41:07 me systemd[1]: cgconfig.service: Main process exited, code=exited, status=87/n/a
Jun 24 13:41:07 me systemd[1]: cgconfig.service: Failed with result 'exit-code'.
Jun 24 13:41:07 me systemd[1]: Failed to start Control Group configuration service.

我会对工作 cgroup 或没有 cgroup 的替代方法感到满意。

答案1

另一种方法是使用systemd-runMemoryHigh资源控制,例如

systemd-run --user --no-block -p MemoryHigh=1G firefox

MemoryHigh是 CGroup V2 的一项功能,并未弃用。如 systemd.resource-control(5) 联机帮助页中所述我们必须让systemd使用CGroup V2。为此,我们必须添加systemd.unified_cgroup_hierarchy=1GRUB_CMDLINE_LINUX_DEFAULTthen /etc/default/grunrun update-grub。请注意,此资源控制已被破坏并且在某些版本的 systemd 中不起作用,例如v239(也有解决方法)

答案2

您可以交互地验证文件的语法:

$ sudo cgconfigparser -l /etc/cgconfig.conf -s 640 -t your-uid:your-gid

需要创建cgroup并关联权限

$ sudo cgcreate -a your-uid:your-gid -t your-uid:your-gid -g memory:browsers

然后尝试在 cgroups 处于活动状态的情况下启动浏览器:

$ cgexec -g memory:/browsers /bin/chromium-browser

答案3

也许timeout可以帮助你:https://github.com/pshved/timeout

来自 github 页面:

-t T- 设置CPU+SYS时间限制为T秒

-m M- 将虚拟内存限制设置为 M KB

所以你必须跑步timeout -m 1000000 /bin/chromium-browser

您可以替换应用程序启动器/菜单条目来运行上述命令,以更加方便。

相关内容