如何限制给定进程的资源使用?

我有一个需要运行的应用程序的进程,但最终使用了太多的IO用法。 并且真的让我的计算机崩溃了,因此在运行时无法做任何其他事情。

所以我想知道是否有办法限制给定进程的IO使用率,RAM和CPU? 当然还有它的子流程。

这是在我的Ubuntu 18.04 LTS系统上。

你应该使用所有cgexeccpulimitionice的组合:

 sudo cgcreate -g memory:/szMyGroup echo $(( 512 * 1024 * 1024 )) | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.limit_in_bytes echo $(( 1024 * 1024 * 1024 )) | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.memsw.limit_in_bytes 

要创建一个名为szMyGroup的控制组(例如在你的case group-great-uncle ),为szMyGroup下运行的进程设置一个上限,最多512 MB的物理内存和最多1024 MB的swap,然后:

 sudo cgexec -g memory:szMyGroup szMyProgram 

这将在MyGroup控制组下运行您的程序

 sudo ionice --class 3 --pid $(pgrep -f szMyProgram) && sudo cpulimit --limit=25 --pid=!#:4 

使用pgrep 重用当前命令行的部分:

  • 将其磁盘访问限制为仅在没有其他程序使用该磁盘时使用该磁盘
  • 将CPU限制为最大值的25%

如果程序开始时不使用大量CPU,请将cpulimit的值降低到当前使用的一半或更少。