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

12 configuration process memory-usage cpu io

我有一个需要运行的应用程序的进程,但最终使用太多的 IO 来完成它的工作。并且真的使我的计算机崩溃,使其在运行时无法执行任何其他操作。

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

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

Fab*_*bby 9

您应该使用所有cgexec,cpulimit和的组合ionice

  1. 限制 RAM 和 SWAP:

    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
    
    Run Code Online (Sandbox Code Playgroud)

    上面的命令创建一个名为szMyGroup(例如在您的情况下group-great-uncle)的控制组,为在szMyGroup最多 512 MB 的物理内存和最多 1024 MB 的交换下运行的进程设置上限,然后:

    sudo cgexec -g memory:szMyGroup szMyProgram
    
    Run Code Online (Sandbox Code Playgroud)

    它将在szMyGroup控制组下运行您的程序,从而确保它们遵守限制

  2. 限制磁盘IO:

    sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
    
    Run Code Online (Sandbox Code Playgroud)

    上面的命令pgrep重用当前命令行的部分一起使用来限制其磁盘访问,以便仅在没有其他程序使用该磁盘时使用该磁盘

  3. 限制CPU:

    sudo cpulimit --limit=25 --pid=!#:4
    
    Run Code Online (Sandbox Code Playgroud)

    程序的 CPU 现在限制为最大值的 25%

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