我有一个需要运行的应用程序进程,但最终占用了太多的 IO 空间。这确实导致我的计算机崩溃,使得在进程运行时无法执行任何其他操作。
所以我想知道是否有办法限制给定进程的 IO 使用率、RAM 和 CPU?当然还有它的子进程。
这是在我的 Ubuntu 18.04 LTS 系统上。
答案1
您应该结合使用所有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
上述命令创建一个名为
szMyGroup
(例如,在您的情况下)的控制组,为在最多 512 MB 的物理内存和最多 1024 MB 的交换group-great-uncle
下运行的进程设置上限,然后:szMyGroup
sudo cgexec -g memory:szMyGroup szMyProgram
它将在你的
szMyGroup
控制组下运行你的程序,从而确保它们遵守限制限制磁盘 IO:
sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
上述命令
pgrep
使用重复使用当前命令行的部分内容限制其磁盘访问,仅在以下情况下使用磁盘没有其他程序正在使用它限制 CPU:
sudo cpulimit --limit=25 --pid=!#:4
该程序的 CPU 现在被限制为最大值的 25%
如果程序一开始不使用大量 CPU,则将 cpulimit 的值降低到当前使用值的一半或更少。