现代服务器的设计具有高度的通用性——通常托管多个应用程序并处理大量其他关键操作。然而,随着运行进程需要越来越多的服务器资源,系统管理员经常面临服务器性能下降和延迟增加的挑战。由于生产服务器上随时都有数百个进程在运行,因此有效进程管理的重要性怎么强调也不为过。
在本文中,我们将探讨进程优先级的概念并研究进程调度。您将学习如何使用 Linux nice和renice命令通过分配和调整进程优先级来管理服务器资源。
进程调度和优先级是进程管理的核心
服务器上运行的每个任务或操作都由一个进程表示。进程是正在运行的程序的一个实例,由其自己的唯一编号标识,并分配有自己的命名空间和系统资源。所有正在运行的进程都由操作系统管理,操作系统负责调度、资源分配和跟踪进程状态。
在典型的 Linux 服务器上,任何给定时间都可能有数百个进程在运行。其中包括确保平稳运行的关键系统进程和提供各种功能的用户进程。在系统资源有限的环境下,有效的进程管理对于确保所有进程都获得足够的内存和 CPU 时间至关重要。
Linux 使用调度和优先级的组合来运行多个进程,从而产生多任务处理的效果。作为操作系统的一部分,进程调度程序控制所有系统和用户进程的执行,分配和调整进程优先级并分配资源。
调度程序通常将 CPU 时间划分为小单元,并根据优先级将其分配给进程。这种方法允许每个进程运行一小段时间,然后再切换到下一个进程,从而防止任何单个进程独占 CPU。
所有正在运行的进程都会根据其资源需求和当前系统负载分配优先级。优先级较高的进程比优先级较低的进程消耗更多的 CPU 时间。这种优先级划分可确保关键操作获得执行所需的资源,即使系统被请求淹没。
虽然进程优先级通常是在调度执行进程时分配的,但 Linux 也采用动态优先级分配。此功能允许操作系统根据进程行为和系统负载实时调整进程优先级,从而优化资源分配并保持系统性能。
Linux 中的进程优先级
Linux 进程优先级通过“niceness”概念进行管理,该概念决定了进程的调度优先级。每个进程都分配有一个 Linux nice值,然后使用该值确定进程在执行时的实际优先级。
Linux 的nice值范围是-20到19,其中-20代表 Linux 进程优先级最高,19代表最低。本质上,nice值决定了进程对其他用户的“友好程度”,这就是为什么数值越大优先级越低的原因。“友好度”越高意味着进程对其他进程“更友好”,从而使它们获得更多的 CPU 时间。“友好度”越低则表示优先级越高,从而为进程提供更多系统资源。
通常,进程的 Linux友好度值从0开始,代表标准(或中性)优先级。优先级较高的进程会获得负的友好度值,而优先级较低的进程则会获得正的友好度值。进程的“友好度”可以动态调整以适应不断变化的系统需求。
尽管 Linux 的nice值对调度优先级有显著影响,但它并不代表进程的实际优先级。它是 Linux 调度程序采用的更复杂算法的一个因素,用于动态计算和维护 Linux 进程优先级。但是,由于Linux 的nice值在确定进程的优先级方面起着关键作用,因此它通常代表进程的优先级。
确定正在运行的进程的优先级
您可以使用Linux ps命令(Linux 进程命令)来确定正在运行的进程的优先级及其 Linux nice值。使用-l标志显示长格式,ps命令将打印正在运行的进程列表以及它们的 Linux nice和优先级,分别由NI和PRI值表示。您还可以使用grep指定要查找的进程的名称:
# ps -axl | grep process_name
在下面的 Linux 进程列表中,每个进程的优先级 ( PRI ) 为20,Linux友好度( NI ) 值为0,这是大多数进程的标准友好度。ps命令报告的优先级 ( PRI ) 值由多个方面决定,包括进程的 Linux友好度值、进程的状态和当前系统负载。优先级值不是静态的,可以根据调度策略和其他因素动态变化:
PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
1430542 7205 20 0 27148 6948 - S ? 0:01 dovecot/pop3-login
1430543 7205 20 0 27164 6908 - S ? 0:00 dovecot/imap-login
1430544 7205 20 0 16268 5032 do_epo S ? 0:00 dovecot/config
1430545 7205 20 0 14228 3336 do_epo S ? 0:00 dovecot/stats
您可以使用–sort选项对ps命令显示的 Linux 进程列表进行排序。使用 –sort=-nice允许您按“niceness” NI列降序对输出进行排序,Linux nice值最高的进程将首先显示。
使用–sort=-pcpu选项按 CPU 利用率百分比对进程列表进行排序,可以查看哪些进程在特定时刻消耗的 CPU 时间最多。这些进程通常具有较高的Linux友好值。
其他 Linux 进程命令和监控实用程序(例如top、atop和htop)也可用于确定系统和用户进程的 Linux良好值和优先级。这些工具提供正在运行的进程及其资源利用率水平的动态实时视图 — 通常用于调查 Linux 服务器上的负载。
Linux nice 和 renice 命令
Linux nice和renice命令用于启动优先级已改变的进程,并调整正在运行的进程的 Linux nice值。nice命令可用于启动具有您指定的优先级的进程,而renice可修改已在运行的进程的优先级。
如今,系统管理员会发现手动调整 Linux 进程优先级的工作比以前少了。现代服务器的功能强大得多,资源匮乏的现象也不再像以前那样严重。此外,高可用性环境可以利用负载平衡并提供其他性能优势。然而,采用机器学习 (ML)和人工智能 (AI)以及其他资源密集型技术的公司可能仍需要微调进程管理,以确保最佳性能。
Linux nice和renice命令可让您全面掌控确保关键进程以适当的优先级运行。使用nice和renice更改进程优先级是一种有效的方法,可防止系统停机并避免进程无响应,在使用kill和killall命令终止Linux 上的进程之前提供主动解决方案。
使用 Linux renice 命令调整正在运行的进程的优先级
您可以使用 Linux renice命令通过修改正在运行的进程的 Linux nice值来更改其 Linux 进程优先级。增加或减少进程的 Linux nice值将影响其相对于其他进程的 CPU 时间分配。
Linux renice 命令的基本语法
Linux renice命令使用以下基本语法:
renice [nice value] -p [process ID (PID)]
renice命令将新的nice值作为参数,并要求您指定将以更改的优先级运行的进程的进程 ID (PID) 。新的 Linux nice值的范围可以从-20(最高优先级)到+19(最低优先级)。如果新指定的nice值大于零,则可以省略+号。
请注意,-n标志对于renice命令来说不是明确必要的,因此没有包含在这里,因为它是可选的,而且可能会造成混淆。
如果您希望按相对量增加或减少进程的Linux友好度值,请使用–relative选项。进程的“友好度”将按给定值增加或减少:
renice --relative [relative amount] -p [process ID (PID)]
更改正在运行的进程的 Linux nice 值
步骤1.获取进程ID(PID)
首先,您必须确定要修改的进程的进程 ID (PID) 。您可以使用ps、top或pgrep命令获取PID。以下命令将列出所有正在运行的进程,其名称由您指定为process_name:
# ps faux | grep process_name
# pgrep -a process_name
在下面的示例中,我们使用pgrep命令列出 MariaDB 进程:
# pgrep -a mariadb
15601 /usr/sbin/mariadbd
步骤 #2. 调整进程的 Linux nice 值
获得进程 ID后,可以使用renice命令修改进程的Linux nice值。在下面的示例中,我们通过将进程的 Linux nice值增加到10来降低进程的优先级。您可以通过提供多个PID来指定多个进程:
# renice 10 -p 1340300
1340300 (process ID) old priority 0, new priority 10
请注意,如果您以root用户身份登录,则只能增加正在运行的进程的 Linux nice值,从而降低其优先级。如果您尝试使用renice命令提高正在运行的进程的优先级,则除非您以root用户或具有sudo权限的管理用户身份登录,否则您将无法执行此操作。非特权用户在尝试降低进程的 Linux nice值时将收到权限被拒绝错误,即使他们拥有该进程:
# renice -10 -p 1340300
renice: failed to set priority for 1340300 (process ID): Permission denied
步骤#3. 验证进程的更新优先级
一旦为进程分配了新的 Linux nice值,就可以使用ps命令验证其更新的优先级:
# ps -o pid,user,pri,ni,pcpu,cmd -p 1340300
PID USER PRI NI %CPU CMD
1340300 admin 9 10 0.0 vim
-o标志定义输出格式包括进程 ID (PID)、Linux nice 值 ( ni)、优先级 ( pri )、CPU 利用率 ( pcpu ) 以及使用-p标志指定的进程的命令 ( cmd ) ,该标志接受进程 ID。
可以看到,在调整Linux nice值之后,niceness( NI)和优先级(PRI)都发生了改变。Linux 操作系统在修改进程的nice Linux 值之后,重新计算了进程的优先级。
更改用户拥有的所有进程的 Linux nice 值
您可以使用renice借助-u或–user选项调整特定 Linux 用户拥有的所有进程的进程优先级。-u标志接受用户 ID ( UID ) 和用户名。
在下面的例子中, UID为1002 的admin用户拥有的所有进程的Linux nice值都增加到了10:
# renice 10 -u admin
# renice 10 -u 1002
使用 Linux nice 命令启动具有改变优先级的进程
Linux nice命令允许您启动具有更改优先级的进程,这会影响进程调度。使用更改的 Linux nice值启动的进程会获得与默认优先级不同的优先级。
Linux nice命令使用以下基本语法:
nice -n [nice value] [command/process]
-n标志用于指定 Linux 的nice值,范围从-20(表示最有利的调度)到+19(表示最不利的调度)。
当启动 Linux nice值为正的进程时,可以省略+号。这是因为只有当值为正时,加号才是可选的。例如,系统会以相同的方式处理以下命令:
-n +10 report-generator
nice -n 10 report-generator
Linux nice值后面是您希望使用所有参数(如果适用)启动的实际命令。一旦使用自定义优先级启动进程,您就可以根据需要使用renice命令对其进行更改。
在下面的示例中,我们启动了一个自定义程序 ( report-generator ),用于生成需要尽快交付的报告。为了让该进程获得更高的优先级,我们使用 Linux nice命令指定nice值为-10。
# nice -n -10 report-generator
如果由于我们的程序消耗了大量的 CPU 时间而导致服务器负载平均值在任何时候开始上升,我们可以使用renice来增加 Linux 的nice值,从而降低进程的优先级。
使用 Liquid Web 提升服务器性能
进程调度和优先级是现代操作系统的基本概念,对于管理进程访问和使用系统资源的方式至关重要。有效的进程管理可确保每个进程获得公平的系统资源份额,从而优化整体系统性能并防止任何潜在的瓶颈。
在 Linux 系统上,进程优先级通过“niceness”概念进行管理,该概念决定了进程在 CPU 时间分配方面的优待程度。Linux nice值较低的进程会获得更多的 CPU 时间,而Linux nice值较高的进程则表示 CPU 时间分配较差。
Linux nice和renice命令旨在通过在启动时为进程分配自定义nice值或修改正在运行的进程的 Linux nice值来更改 Linux 进程优先级。调整进程优先级的能力对于确保系统稳定性和保持最佳服务器性能来说是一种非常有用的工具。