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

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

我有一个需要运行的应用程序进程,但最终占用了太多的 IO 空间。这确实导致我的计算机崩溃,使得在进程运行时无法执行任何其他操作。

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

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

答案1

您应该结合使用所有cgexeccpulimitionice

  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
    

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

    sudo cgexec -g memory:szMyGroup szMyProgram
    

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

  2. 限制磁盘 IO:

    sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
    

    上述命令pgrep使用重复使用当前命令行的部分内容限制其磁盘访问,仅在以下情况下使用磁盘没有其他程序正在使用它

  3. 限制 CPU:

    sudo cpulimit --limit=25 --pid=!#:4
    

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

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

相关内容