12 configuration process memory-usage cpu io
我有一个需要运行的应用程序的进程,但最终使用太多的 IO 来完成它的工作。并且真的使我的计算机崩溃,使其在运行时无法执行任何其他操作。
所以我想知道是否有办法限制给定进程的 IO 使用、RAM 和 CPU?当然还有它的子流程。
这是在我的 Ubuntu 18.04 LTS 系统上。
您应该使用所有cgexec
,cpulimit
和的组合ionice
:
限制 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
控制组下运行您的程序,从而确保它们遵守限制
限制磁盘IO:
sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
Run Code Online (Sandbox Code Playgroud)
上面的命令pgrep
与重用当前命令行的部分一起使用来限制其磁盘访问,以便仅在没有其他程序使用该磁盘时使用该磁盘
限制CPU:
sudo cpulimit --limit=25 --pid=!#:4
Run Code Online (Sandbox Code Playgroud)
程序的 CPU 现在限制为最大值的 25%
如果程序开始时不使用大量 CPU,请将 cpulimit 的值降低到当前使用值的一半或更少。