限制终端命令内存使用量(以前是 CPU 使用量)

限制终端命令内存使用量(以前是 CPU 使用量)

我有一些二进制文件想在终端中运行,但如果我运行它,它很快就会开始使用 100% 的两个 CPU、100% 的内存,并且整个 Linux 会在几秒钟内冻结。而且我没有源代码(为了从内部让它平静下来)。我在 Google 上搜索了很多,找到并尝试了两种可能的解决方案:

  1. nice- 实际上什么都不做,运行后二进制文件仍然很快占用了 100% 的 CPU 和 100% 的内存
  2. ulimit -v导致二进制文件甚至其他一些命令(如 git)崩溃并引发一些错误

是否有任何简单的解决方案可以限制此二进制文件的 CPU 使用率或内存,并让它仅使用一个 CPU 或两个 CPU 的 50% 或仅使用少量内存?我想象这样的事情:

user@linux:~$ magical_command --limitmemory 1M --command mybinary

或者:

user@linux:~$ magical_command --cpu both --limitcpu 50% --command mybinary

或者:

user@linux:~$ magical_command --cpu one --limitcpu 100% --command mybinary

更新:从下面的评论来看,这似乎是由内存而不是 CPU 超载引起的,因此我编辑了这个问题,但对于那些寻找 CPU 限制神奇命令的人,我仍然推荐@dbkeys 的答案。

更新 2:正如以下评论中所要求的:如果我重新启动笔记本电脑并仅运行终端和终端上的二进制文件,而不运行其他任何文件,我的笔记本电脑会明显变慢,鼠标和键盘工作时会出现延迟或不稳定。但是二进制文件可以工作几个小时(大部分时间都在下载和编译依赖项),因此我打开 Chrome 并执行其他操作。如果我打开 Chrome 并让二进制文件在后台运行,整个 Linux 就会完全冻结,什么都没有,甚至鼠标也没有响应。我必须按住关闭按钮 5 秒钟才能硬关机。但我不能只是运行它然后离开,我想做一些其他的事情,因此我想以某种方式限制二进制文件和 Chrome。

答案1

任务集,可能是您正在寻找的“magical_command”。根据其手册页:

“...taskset 用于根据正在运行的进程的 pid 设置或检索其 CPU 亲和性,或根据给定的 CPU 亲和性启动新命令。CPU 亲和性是一种调度程序属性,可将进程“绑定”到系统上的一组给定 CPU。Linux 调度程序将遵守给定的 CPU 亲和性,并且该进程不会在任何其他 CPU 上运行。”

这将限制我的二进制在前两个核心上运行:

taskset --cpu-list 0,1 mybinary

不幸的是,我没有看到参数任务集这也会限制你想分配给它运行的 CPU 时间百分比我的二进制

相关内容