renice 和 ionice 很不错

renice 和 ionice 很不错

我读过有关nice renice控制ionice正在运行的进程的调度优先级的文章。但是,我仍然不明白它们何时以及如何有用。例如执行以下操作:

nice -n 13 pico myfile.txt

答案1

至于 pico,它不太可能引起太多关注,因此它不是您通常会 nice/renice 或 ionice 的那种命令。但是您的命令将执行 pico niced 到 +13。这意味着分配给它的时间会大大减少。例如,在您的 pico 行之后。通常执行的 pico 如下所示:

UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S     ADDR TTY           TIME CMD
501 20118 20117     4006   0  31  0  2435548   1068 -      S     eb577e0 ttys000    0:00.03 -bash
501 20136 20118     4006   0  31  0  2434992    772 -      S+    85eed20 ttys000    0:00.00 pico

其中 NI 是最佳级别。如果我使用你的命令运行 pico,它看起来如下:

UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S     ADDR TTY           TIME CMD
501 20118 20117     4006   0  31  0  2435548   1068 -      S     eb577e0 ttys000    0:00.03 -bash
501 20179 20118     4006   0  18 13  2434992    904 -      SN+   85eed20 ttys000    0:00.01 pico

好的,这说明您运行的命令行是有效的,但它实际上做了什么?好的,假设您的系统非常繁忙,但也不是特别繁忙。它全天 24 小时都很繁忙,午夜时分一项重要的维护任务开始。它是 mysql 命令行,运行一个脚本来生成一些每日统计数据。有很多处理任务,所以它会严重占用 CPU,用户对此抱怨。他们抱怨得很强烈。您能做些什么呢?这个脚本需要多长时间并不重要,因此您在命令前面加上“nice -n 13”,下次运行时它不会对用户造成太严重的影响,但需要更长的时间才能完成。MySQL 脚本的所有者并不关心,因为他只想在第二天收到统计数据。每个人都很高兴。

除了故事之外,这些工具可以让您控制系统如何优先分配 CPU(在 ionice 的情况下可能是 IO)时间给任务。它们仅在系统满负荷时才会产生效果,在此之前,每个任务都会被分配所需的所有时间。

renice 命令的工作方式非常相似,但它允许您更改已在运行的进程的优先级。因此,在上面的例子中,您可以使用 renice 更改 mysql 命令的优先级,而无需重新启动它。以下命令将把名为“mysql”的所有正在运行的任务重新设置为 +13,这是一个低得多的优先级:

renice -n 13 -p `pidof mysql`

至于 ionice,我无法评论,但我想它可以让您对 IO 做类似的事情。影响某些任务执行的 IO 量,例如磁盘读/写。如果需要,可以用于限制备份过程吗?

答案2

ionice是 Linux 内核的 IO 调度子系统的接口,它允许根据每个进程设置 IO 优先级。它的用例可能是降低为该updatedb命令构建数据库的命令的优先级locate,这样其他 IO 就可以不受干扰地运行,因为 updatedb 仅在当前没有其他 IO 运行时才执行 IO。

答案3

nice是启动一个经过调整的程序友善level 基本上是 CPU 调度程序。niceness 值的范围从-20(对进程最有利)到19(对进程最不利)。默认值是,10并且只能root使用负调整来获得更有利的优先级。

renice-p通过指定进程 ID(选项)、进程组 ID(选项-g)或用户名或用户 ID(选项-u),仅对已经运行的进程执行与上述相同的操作。

ionice设置或调整程序和进程的 I/O 调度程序优劣以访问“磁盘“设备。优先级位于以下三个调度类别之一中:1即时的(无论发生什么,都尝试优先处理),2或者最大努力(正常调度,另见参考链接),3闲置的(仅在没有其他进程访问磁盘时才安排)。

例如,您可以fstrim在启动时rc.local使用这样的代码片段运行命令,以便完成您的工作并且对整个系统几乎没有负担。

(
  sleep 15s #1
  /usr/bin/fstrim -a -v &> /var/log/fstrim.log & #2
  pid=$! #3
  ionice -c 3 -p $pid #4
  renice -n +19 -p $pid #5
) &> /dev/null & #6
  1. 它会等待 15 秒才继续,以避免系统立即过载(这样它可以更快地完成启动序列)。
  2. fstrim在后台启动命令并将其输出到日志文件中,并且
  3. 它记录它的 PID 号码。
  4. 它将进程 I/O 调度程序调整为空闲类,并
  5. 将其设置为最低 CPU 调度优先级。
  6. 整个代码片段在后台启动以使启动过程继续进行。

参考。

相关内容