我需要在 Linux(Ubuntu 20.04.3 LTS)上运行一个不是我编写的程序(即 BLAST),并且我需要为这种特定情况设置 RAM 使用限制,因为我正在使用共享 CPU。另外,我不想安装或使用其他人开发的脚本。我想我可以使用 prlimit,例如:
prlimit --pid xxxx --rss=yyy
但我不确定 --rss 是否是限制 RAM 使用量的正确参数,因为我是这个领域的新手,并且对报告中的不同选项有点困惑手册页。另外,我不知道如何表达这样的限制,我没有找到任何相关信息(我需要将 RAM 限制设置为 300GB 左右)。所以,我查看了较早的相关问题,但我仍然有这些疑问。
我也阅读了对其他建议使用 ulimit 的问题的答复,但据我所知,这会对当前用户应用限制(虽然我不想为特定用户设置限制,而只想为当前正在运行的特定进程设置限制)。
编辑
我尝试使用以下命令:
prlimit --memlock=1024 --rss=1024 --pid xxxxxx
将限制设置为 1024,只是想看看它是否有效,但事实并非如此。我的进程没有被终止。知道我做错了什么吗?还有其他解决方案吗?
提前致谢!
答案1
一般来说,当我需要一次性完成某个流程时,我会使用systemd-run
但有一些限制:
systemd-run --scope -p MemoryMax=300G {program or script}
这会用于cgroups
有效管理资源能够承担这一过程以及任何子线程。虽然该命令会要求您输入密码,但该过程在您的用户下运行,并且不会使用sudo
。