系统管理指南:高级管理

管理进程类信息

以下列表列出了可在系统中配置的进程调度类。其中还包括分时类的用户优先级范围。

可能的进程调度类如下所示:

更改进程的调度优先级 (priocntl)

进程的调度优先级是进程调度程序根据调度策略分配的优先级。dispadmin 命令可以列出缺省调度策略。有关更多信息,请参见 dispadmin(1M) 手册页。

可以使用 priocntl 命令将进程指定给优先级类并管理进程优先级。有关使用 priocntl 命令管理进程的说明,请参见如何指定进程优先级 (priocntl)

Procedure如何显示有关进程类的基本信息 (priocntl)

  1. 使用 priocntl -l 命令可显示进程调度类和优先级范围。


    $ priocntl -l
    

示例 12–5 显示有关进程类的基本信息 (priocntl)

以下示例显示 priocntl -l 命令的输出。


# priocntl -l
CONFIGURED CLASSES
==================

SYS (System Class)

TS (Time Sharing)
        Configured TS User Priority Range: -60 through 60

FX (Fixed priority)
        Configured FX User Priority Range: 0 through 60

IA (Interactive)
        Configured IA User Priority Range: -60 through 60

Procedure如何显示进程的全局优先级

  1. 使用 ps 命令可显示进程的全局优先级。


    $ ps -ecl
    

    PRI 列下列出了全局优先级。


示例 12–6 显示进程的全局优先级

以下示例显示 ps -ecl 命令的输出。PRI 列中的值显示,pageout 进程优先级最高,而 sh 进程的优先级最低。


$ ps -ecl
 F S UID PID  PPID CLS PRI  ADDR      SZ  WCHAN    TTY      TIME   COMD
19 T 0   0    0    SYS 96   f00d05a8   0           ?        0:03  sched
 8 S 0   1    0    TS  50   ff0f4678 185  ff0f4848 ?       36:51   init
19 S 0   2    0    SYS 98   ff0f4018   0  f00c645c ?        0:01 pageout
19 S 0   3    0    SYS 60   ff0f5998   0  f00d0c68 ?      241:01 fsflush
 8 S 0   269  1    TS  58   ff0f5338 303  ff49837e ?        0:07    sac
 8 S 0   204  1    TS  43   ff2f6008  50  ff2f606e console  0:02     sh

Procedure如何指定进程优先级 (priocntl)

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 以指定的优先级启动进程。


    # priocntl -e -c class -m user-limit -p pri command-name
    
    -e

    执行该命令。

    -c class

    指定要在其中运行进程的类。有效类包括 TS(分时)、RT(实时)、IA(交互)、FSS(公平份额)和 FX(固定优先级)。

    -m user-limit

    使用 -p 选项时,可以指定可将优先级提高或降低的最大量。

    -p pri command-name

    允许您为实时线程指定在 RT 类中的相对优先级。对于分时进程而言,使用 -p 选项可以指定用户提供的优先级,该优先级范围是 -60 到 +60。

  3. 验证进程状态。


    # ps -ecl | grep command-name
    

示例 12–7 指定进程优先级 (priocntl)

以下示例显示如何以用户提供的最高优先级启动 find 命令。


# priocntl -e -c TS -m 60 -p 60 find . -name core -print
# ps -ecl | grep find

Procedure如何更改分时进程的调度参数 (priocntl)

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 更改正在运行的分时进程的调度参数。


    # priocntl -s -m user-limit [-p user-priority] -i idtype idlist
    
    -s

    允许设置用户优先级范围的上限并更改当前优先级。

    -m user-limit

    使用 -p 选项时,可以指定可将优先级提高或降低的最大量。

    -p user-priority

    允许指定优先级。

    -i xidtype xidlist

    结合使用 xidtypexidlist 以标识一个或多个进程。xidtype 指定 ID 的类型,例如进程 ID 或用户 ID。使用 xidlist 可以标识进程 ID 或用户 ID 的列表。

  3. 验证进程状态。


    # ps -ecl | grep idlist
    

示例 12–8 更改分时进程的调度参数 (priocntl)

以下示例显示如何以 500 毫秒的时间片、RT 类中的优先级 20 以及全局优先级 120 来执行命令。


# priocntl -e -c RT -m 500 -p 20 myprog
# ps -ecl | grep myprog

Procedure如何更改进程的类 (priocntl)

  1. (可选的)成为超级用户或同等角色。

  2. 更改进程的类。


    # priocntl -s -c class -i idtype idlist
    
    -s

    允许设置用户优先级范围的上限并更改当前优先级。

    -c class

    为分时或实时指定要更改进程的类 TSRT

    -i idtype idlist

    结合使用 xidtypexidlist 以标识一个或多个进程。xidtype 指定 ID 的类型,例如进程 ID 或用户 ID。使用 xidlist 可以标识进程 ID 或用户 ID 的列表。


    注 –

    只有超级用户或在实时 Shell 中工作的用户才能将某一进程更改为实时进程或将实时进程更改为该进程。如果超级用户将用户进程更改为实时类,那么该用户以后不能使用 priocntl -s 命令来更改实时调度参数。


  3. 验证进程状态。


    # ps -ecl | grep idlist
    

示例 12–9 更改进程的类 (priocntl)

以下示例显示如何将属于用户 15249 的所有进程都更改为实时进程。


# priocntl -s -c RT -i uid 15249
# ps -ecl | grep 15249

更改分时进程的优先级 (nice)

支持 nice 命令的目的只是为了向下兼容以前的 Solaris 发行版。priocntl 命令在管理进程方面提供了更多的灵活性。

进程的优先级由其调度类的策略和 nice 数值决定。每个分时进程都有全局优先级。全局优先级的计算方法是用户提供的优先级(该优先级可能受 nice priocntl 命令影响)加上系统计算的优先级。

进程的执行优先级数由操作系统分配。优先级数由多个因素决定,其中包括进程的调度类、进程使用的 CPU 时间以及进程的 nice 数值(对于分时进程的情况)。

每个分时进程都以缺省 nice 数值启动,它从父进程中继承该数值。nice 数值显示在 ps 报告的 NI 列中。

用户可通过提高用户提供的优先级来降低进程的优先级。但是,只有超级用户能够通过降低 nice 数值来提高进程的优先级。此限制使用户无法提高自己所拥有进程的优先级,因此会独占更大的 CPU 份额。

nice 数值的范围是从 0 到 +39,其中 0 表示最高优先级。每个分时进程的缺省 nice 值为 20。有两个可用的命令版本:标准版本 /usr/bin/nice 以及 C shell 内置命令。

Procedure如何更改进程的优先级 (nice)

通过使用此过程,用户可以降低进程的优先级。而超级用户可以提高或降低进程的优先级。


注 –

本节介绍的是 /usr/bin/nice 命令而非 C-shell 内置 nice 命令的语法。有关 C-shell nice 命令的信息,请参见 csh(1) 手册页。


  1. 确定要以用户身份还是超级用户身份更改进程的优先级。然后,选择以下两项之一:

    • 以用户身份,按照步骤 2 中的示例降低命令的优先级。

    • 以超级用户的身份,按照步骤 3 中的示例提高或降低命令的优先级。

  2. 以用户身份,通过增大 nice 数值降低命令的优先级。

    以下 nice 命令使 nice 数值增大 5 个单位,从而以更低的优先级执行 command-name


    $ /usr/bin/nice -5 command-name
    

    在前面的命令中,减号指定后面的内容是一个选项。也可以通过以下方式来指定此命令:


    % /usr/bin/nice -n 5 command-name
    

    以下 nice 命令使 nice 数值增大 10 个单位(缺省增量)但未超出最大值 39,从而降低了 command-name 的优先级。


    % /usr/bin/nice command-name
    
  3. 作为超级用户或同等角色,通过更改 nice 数值来提高或降低命令的优先级。

    以下 nice 命令使 nice 数值降低 10 个单位但不低于最小值 0,从而提高了 command-name 的优先级。


    # /usr/bin/nice --10 command-name
    

    在前面的命令中,第一个减号指定后面的内容是一个选项。第二个减号指示一个负数。

    以下 nice 命令使 nice 数值增大 5 个单位但未超出最大值 39,从而降低了 command-name 的优先级。


    # /usr/bin/nice -5 command-name
    
另请参见

有关更多信息,请参见 nice(1) 手册页。