在 Linux 中,在有限的资源内运行进程

在 Linux 中,在有限的资源内运行进程

除了使用 nice 和 ionice 之外,还有其他方法可以在严格有限的资源(即 cpu、内存、I/O)内运行进程(例如 ls、du、find 等)吗?因为我发现它们在我的例子中不够有效。

我有一台生产服务器,其中的目录中有大量的文件,需要删除、移动、获取它们的总大小等

答案1

有一个比 (re)nice 更极端的进程控制级别:chrt。您可以将进程设置为 SCHED_IDLE。与 ionice IDLE 结合使用应该可以完成工作。

确实有一个设备映射器目标,但不幸的是它还没有进入主线内核,但它可以给你更多的控制权:艾奥班德

另一个选择是:将此过程放入虚拟机中。KVM 中可以直接访问 VFS,您可以精确定义虚拟机获得的 I/O 量。

答案2

您可以使用任务集将进程组限制到特定的 CPU,并且如果您将其 ionice 调到最大,这将有所帮助 - 但它仍然运行得足够快以刷新您的 VFS 缓存(如果这是一个问题)并且 VFS 缓存超出了限制配额 - 但使用限制不会有帮助,因为它只是在用完时禁用新进程。

实际上,如果您想在后台缓慢地移动树,那么您就必须编写一些代码。

答案3

请注意,ionice根据您指定的类别,使用情况可能会有所不同;在类似情况下,使用 ionice 'idle' 类别的 nice 值 19 对我来说效果很好,不会过多增加 CPU/IO

你可以这样使用它:

nice -n 19 'command'
ionice -c 3 -p `ps aux | grep command | grep -v grep | awk {'print $2'}`

相关内容