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


11

我有一个需要运行的应用程序流程,但最终却为此使用了太多的IO使用率。确实使我的计算机崩溃了,这使得它在运行时无法执行其他任何操作。

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

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


2
@GreatUncleBulgaria并非如此,除非您想放弃声誉点。您要提出的问题的简单答案是,将其他人提出的建议- ionicerenice-以及可能的ulimit -s命令组合在一起,仅 此而已。
Sergiy Kolodyazhnyy

@GreatUncleBulgaria不熟悉,cgroups-io所以不知道:)
Sergiy Kolodyazhnyy

可能相关的问题:askubuntu.com/q/538992/295286那里的答案提到了cgroups,但其他的没什么,所以。。。也许 ?
Sergiy Kolodyazhnyy

1
@SergiyKolodyazhnyy:好像有人清理了评论!

Answers:


8

您应该使用所有的组合cgexeccpulimit并且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

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

    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现在限制为最大CPU的25%

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.