JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 管理:Oracle Solaris Zones、Oracle Solaris 10 Zones 和资源管理     Oracle Solaris 11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分Oracle Solaris 资源管理

1.  资源管理介绍

2.  项目和任务(概述)

3.  管理项目和任务

4.  扩展记帐(概述)

5.  管理扩展记帐(任务)

6.  资源控制(概述)

资源控制概念

资源限制和资源控制

进程间通信和资源控制

资源控制约束机制

项目属性机制

配置资源控制和属性

可用的资源控制

区域范围的资源控制

单位支持

资源控制值和特权级别

针对资源控制值的全局和本地操作

针对资源控制值的全局操作

针对资源控制值的本地操作

资源控制标志和属性

资源控制执行

全局监视资源控制事件

应用资源控制

在正在运行的系统上临时更新资源控制值

更新日志状态

更新资源控制

用于资源控制的命令

7.  管理资源控制(任务)

8.  公平份额调度器(概述)

9.  管理公平份额调度器(任务)

10.  使用资源上限设置守护进程控制物理内存(概述)

11.  管理资源上限设置守护进程(任务)

12.  资源池(概述)

13.  创建和管理资源池(任务)

14.  资源管理配置示例

第 2 部分Oracle Solaris Zones

15.  Oracle Solaris Zones 介绍

16.  非全局区域配置(概述)

17.  规划和配置非全局区域(任务)

18.  关于安装、关闭、停止、卸载和克隆非全局区域(概述)

19.  安装、引导、关闭、停止、卸载和克隆非全局区域(任务)

20.  非全局区域登录(概述)

21.  登录到非全局区域(任务)

22.  关于区域迁移和 zonep2vchk 工具

23.  迁移 Oracle Solaris 系统和迁移非全局区域(任务)

24.  关于安装了区域的 Oracle Solaris 11 系统上的自动安装和软件包

25.  Oracle Solaris Zones 管理(概述)

26.  管理 Oracle Solaris Zones(任务)

27.  配置和管理不可编辑的区域

28.  各种 Oracle Solaris Zones 问题的故障排除

第 3 部分Oracle Solaris 10 Zones

29.  Oracle Solaris 10 Zones 介绍

30.  评估 Oracle Solaris 10 系统和创建归档文件

31.  (可选)将 Oracle Solaris 10 native 非全局区域迁移到 Oracle Solaris 10 Zones

32.  配置 solaris10 标记区域

33.  安装 solaris10 标记区域

34.  引导区域、登录和区域迁移

词汇表

索引

配置资源控制和属性

通过 project 数据库配置资源控制功能。请参见第 2 章。资源控制和其他属性在 project 数据库条目的最终字段中设置。与每个资源控制关联的值都括在括号中,并显示为用逗号分隔的纯文本。括号中的值构成一条“操作子句”。每条操作子句都包含一个特权级别、一个阈值以及一个与特定阈值关联的操作。每个资源控制可以有多条操作子句,这些子句也用逗号分隔。以下条目定义了项目实体的按任务轻量进程限制和按进程最多 CPU 时间限制。当进程运行 1 小时之后,process.max-cpu-time 将会向此进程发送 SIGTERM;如果此进程持续运行的总时间达到 1 小时 1 分钟,则会向此进程发送 SIGKILL。请参见表 6-3

development:101:Developers:::task.max-lwps=(privileged,10,deny);
  process.max-cpu-time=(basic,3600,signal=TERM),(priv,3660,signal=KILL)
typed as one line

注 - 在启用了区域的系统上,使用稍有不同的格式在区域配置中指定整个区域范围的资源控制。有关更多信息,请参见区域配置数据


使用 rctladm 命令,可以对全局范围的资源控制功能进行运行时询问和修改。使用 prctl 命令,可以对本地范围的资源控制功能进行运行时询问和修改。

有关更多信息,请参见针对资源控制值的全局和本地操作rctladm(1M)prctl(1)


注 - 在安装了区域的系统上,不能在非全局区域中使用 rctladm 来修改设置。您可以在非全局区域中使用 rctladm 来查看每个资源控制的全局日志状态。


可用的资源控制

下表列出了此发行版中可用的标准资源控制。

该表介绍了每个控制所约束的资源,还列出了 project 数据库使用的该资源的缺省单位。缺省单位有两种类型:

因此,project.cpu-shares 指定了项目有资格享有的份额数。process.max-file-descriptor 指定了可由 open(2) 系统调用指定给进程的最高文件编号。

表 6-1 标准项目、任务和进程资源控制

控制名称
说明
缺省单位
project.cpu-cap
项目可以占用的 CPU 资源量的绝对限制。值 100 表示将一个 CPU 的 100% 用作 project.cpu-cap 设置。值 125 表示 125%,因为在使用 CPU 上限时,100% 对应于系统中的一个 CPU。
数量(CPU 数目)
project.cpu-shares
授予此项目的 CPU 份额数,用于公平份额调度器(请参见 FSS(7))。
数量(份额)
project.max-crypto-memory
libpkcs11 用于加速硬件加密的内核内存总量。内核缓冲区分配以及与会话相关的结构分配都按照此资源控制执行。
大小(字节)
project.max-locked-memory
允许的锁定物理内存总量。

如果将 priv_proc_lock_memory 指定给用户,请考虑同时设置此资源控制,以防止该用户锁定所有内存。

注意,该资源控制取代了已删除的 project.max-device-locked-memory

大小(字节)
project.max-msg-ids
此项目允许的最大消息队列 ID 数。
数量(消息队列 ID)
project.max-port-ids
允许的最大事件端口数。
数量(事件端口数)
project.max-processes
此项目可同时使用的最大进程表槽数。

注意,由于常规进程和僵进程都使用进程表槽,因此 max-processes 控制可以防止僵进程用尽进程表。根据定义,由于僵进程没有任何 LWP(轻量级进程),max-lwps 控制无法防止这种可能性。

数量(进程表槽数)
project.max-sem-ids
此项目允许的最大信号 ID 数。
数量(信号量 ID)
project.max-shm-ids
此项目允许的最大共享内存 ID 数。
数量(共享内存 ID)
project.max-shm-memory
此项目允许的 System V 共享内存总量。
大小(字节)
project.max-lwps
此项目可同时使用的最大 LWP 数。
数量 (LWP)
project.max-tasks
此项目中允许的最大任务数。
数量(任务数)
project.max-contracts
此项目中允许的最大合同数。
数量(合同)
task.max-cpu-time
此任务进程可用的最多 CPU 时间。
时间(秒)
task.max-lwps
此任务的进程可同时使用的最大 LWP 数。
数量 (LWP)
task.max-processes
此任务的进程可同时使用的最大进程表槽数。
数量(进程表槽数)
process.max-cpu-time
此进程可用的最长 CPU 时间。
时间(秒)
process.max-file-descriptor
此进程可用的最大文件描述符索引。
索引(最大文件描述符)
process.max-file-size
此进程可写入的最大文件偏移。
大小(字节)
process.max-core-size
此进程创建的最大核心文件大小。
大小(字节)
process.max-data-size
此进程可用的最大堆栈缓冲池内存。
大小(字节)
process.max-stack-size
此进程可用的最大堆栈缓冲池内存段。
大小(字节)
process.max-address-space
此进程可用的最大地址空间量,即段大小的总和。
大小(字节)
process.max-port-events
每事件端口允许的最大事件数。
数量(事件数)
process.max-sem-nsems
每信号集允许的最大信息数。
数量(每集合中的信号数)
process.max-sem-ops
semop 调用允许的最大信号操作数(在 semget() 时间从资源控制复制的值)。
数量(操作数)
process.max-msg-qbytes
消息队列中消息的最大字节数(在 msgget() 时间从资源控制复制的值)。
大小(字节)
process.max-msg-messages
消息队列中的最大消息数(在 msgget() 时间从资源控制复制的值)。
数量(消息数)

您可以在未设置或更改任何资源控制的系统上显示资源控制的缺省值。此类系统在 /etc/systemproject 数据库中不包含任何非缺省条目。要显示值,请使用 prctl 命令。

区域范围的资源控制

区域范围的资源控制可限制区域内所有进程实体总的资源使用情况。也可以使用全局属性名称来设置区域范围的资源控制,如设置区域范围的资源控制如何配置区域中所述。

表 6-2 区域资源控制

控制名称
说明
缺省单位
zone.cpu-cap
非全局区域可以占用的 CPU 资源量的绝对限制。

100 表示将一个 CPU 的 100% 用作 project.cpu-cap 设置。值 125 表示 125%,因为在使用 CPU 上限时,100% 对应于系统中的一个 CPU。

数量(CPU 数目)
zone.cpu-shares
此区域的公平份额调度器 (fair share scheduler, FSS) CPU 份额数
数量(份额)
zone.max-lofi
可以由区域创建的 lofi 设备的最大数量。

该值限制每个区域对次要节点名称空间的使用。

数量(lofi 设备的数量)
zone.max-locked-memory
区域可用的锁定物理内存的总量

在将 priv_proc_lock_memory 指定给区域时,请考虑同时设置此资源控制,以防止该区域锁定所有内存。

大小(字节)
zone.max-lwps
此区域可同时使用的最大 LWP 数
数量 (LWP)
zone.max-msg-ids
此区域允许的最大消息队列 ID 数
数量(消息队列 ID)
zone.max-processes
此区域可同时使用的最大进程表槽数。

由于常规进程和僵进程都使用进程表槽,因此 max-processes 控制可以防止僵进程用尽进程表。根据定义,由于僵进程没有任何 LWP(轻量级进程),max-lwps 控制无法防止这种可能性。

数量(进程表槽数)
zone.max-sem-ids
此区域允许的最大信号量 ID 数
数量(信号量 ID)
zone.max-shm-ids
此区域允许的最大共享内存 ID 数
数量(共享内存 ID)
zone.max-shm-memory
此区域允许的系统 V 共享内存总量
大小(字节)
zone.max-swap
可用于此区域的用户进程地址空间映射和 tmpfs 挂载的交换空间总量
大小(字节)

有关配置区域范围的资源控制的信息,请参见资源类型属性如何配置区域

请注意,可将区域范围的资源控制应用于全局区域。有关其他信息,请参见在安装了区域的 Oracle Solaris 系统上使用公平份额调度器

单位支持

所有资源控制均定义了标识资源控制类型的全局标志。系统使用这些标志将基本类型信息传递给应用程序(如 prctl 命令)。应用程序使用此信息确定以下内容:

以下全局标志均可用:

全局标志
资源控制类型字符串
修饰符
标度
RCTL_GLOBAL_BYTES
bytes
B
1
KB
210
MB
220
GB
230
TB
240
PB
250
EB
260
RCTL_GLOBAL_SECONDS
seconds
s
1
Ks
103
Ms
106
Gs
109
Ts
1012
Ps
1015
Es
1018
RCTL_GLOBAL_COUNT
count
none
1
K
103
M
106
G
109
T
1012
P
1015
E
1018

标度值可用于资源控制。以下示例显示了标度阈值:

task.max-lwps=(priv,1K,deny)

注 - 单位修饰符由 prctlprojaddprojmod 命令接受。您不能在 project 数据库本身中使用单位修饰符。


资源控制值和特权级别

资源控制的阈值设立了一个执行点,在此点可能会触发本地操作或者发生全局操作(如日志记录)。

资源控制的每个阈值都必须与某个特权级别相关联。特权级别必须为以下三种类型之一。

每个资源控制都保证有一个由系统或资源提供器定义的系统值。系统值表示操作系统的当前实现可以提供的资源量。

可以定义任意数量的特权值,但仅允许定义一个基本值。缺省情况下,将为没有指定特权值时执行的操作指定基本特权。

资源控制值的特权级别在资源控制块(如 RCTL_BASIC、RCTL_PRIVILEGED 或 RCTL_SYSTEM)的特权字段中定义。有关更多信息,请参见 setrctl(2)。您可以使用 prctl 命令来修改与基本级别和特权级别关联的值。

针对资源控制值的全局和本地操作

针对资源控制值可执行两种类别的操作: 全局操作和本地操作。

针对资源控制值的全局操作

全局操作应用于系统中每个资源控制的资源控制值。您可以使用 rctladm(1M) 手册页中所述的 rctladm 命令来执行以下操作:

您可以对资源控制禁用或启用全局日志操作。通过指定严重性级别,您可以将 syslog 操作设置为特定的级别 syslog=levellevel 的可能设置如下:

缺省情况下,没有资源控制违规的全局日志。级别 n/a 指示无法对其配置全局操作的资源控制。

针对资源控制值的本地操作

本地操作对试图超过控制值的进程执行。对于为资源控制设定的每个阈值,您都可以关联一个或多个操作。有三种类型的本地操作: nonedenysignal=。这三种操作按以下方式使用:

none

对于请求数量大于阈值的资源请求不执行任何操作。在不影响应用程序进度的情况下监视资源的使用情况时,此操作非常有用。虽然超过阈值的进程不会受到影响,但是您还可以启用在超过资源控制时显示的全局消息。

deny

您可以拒绝请求数量大于阈值的资源请求。例如,如果新的进程超过控制值,则带有操作 denytask.max-lwps 资源控制会导致 fork 系统调用失败。请参见 fork(2) 手册页。

signal=

您可以在超过资源控制时启用全局信号消息操作。当超过阈值时,会向进程发送信号。如果进程占用了其他资源,则不会发送其他信号。表 6-3 中列出了可用的信号。

并非所有的操作都可应用于每个资源控制。例如,某个进程的 CPU 份额数不能超过为其所属的项目指定的 CPU 份额数。因此,不允许对 project.cpu-shares 资源控制执行拒绝操作。

由于存在实现限制,因此,每个控制的全局属性可以限制可对阈值设置的可用操作的范围。(请参见 rctladm(1M) 手册页。)下表列出了可用信号操作。有关信号的其他信息,请参见 signal(3HEAD) 手册页。

表 6-3 可用于资源控制值的信号

信号
说明
附注
SIGABRT
终止进程。
SIGHUP
发送挂起信号。当载波在断开的线路上停止时出现。发送给控制终端的进程组的信号。
SIGTERM
终止进程。由软件发送的终止信号。
SIGKILL
终止进程并中止程序。
SIGSTOP
停止进程。作业控制信号。
SIGXRES
超过了资源控制限制。由资源控制功能生成。
SIGXFSZ
终止进程。超过了文件大小限制。
仅可用于具有 RCTL_GLOBAL_FILE_SIZE 属性的资源控制 (process.max-file-size)。有关更多信息,请参见 rctlblk_set_value(3C)
SIGXCPU
终止进程。超过了 CPU 时间限制。
仅可用于具有 RCTL_GLOBAL_CPUTIME 属性的资源控制 (process.max-cpu-time)。有关更多信息,请参见 rctlblk_set_value(3C)

资源控制标志和属性

系统的每个资源控制都有一组特定的关联属性。这组属性定义为一组标志,这些标志与此资源的所有受控实例关联。不能修改全局标志,但是可以使用 rctladmgetrctl 系统调用检索这些标志。

本地标志可为特定进程或进程集合中资源控制的特定阈值定义缺省行为和配置。一个阈值的本地标志不会影响同一资源控制的其他已定义阈值的行为。但是,全局标志会影响与特定控制关联的每个值的行为。可以在本地标志对应的全局标志提供的约束内,使用 prctl 命令或 setrctl 系统调用对本地标志进行修改。请参见 setrctl(2)

有关本地标志、全局标志及其定义的完整列表,请参见 rctlblk_set_value(3C)

要确定在达到特定资源控制的阈值时的系统行为,请使用 rctladm 显示此资源控制的全局标志。例如,要显示 process.max-cpu-time 的值,请键入以下内容:

$ rctladm process.max-cpu-time
    process.max-cpu-time  syslog=off  [ lowerable no-deny cpu-time inf seconds ]

全局标志表示以下内容。

lowerable

不需要超级用户特权来减小此控制的特权值。

no-deny

即使当超过阈值时,也从不拒绝对资源的访问。

cpu-time

SIGXCPU 可用于在到达此资源的阈值时发送。

seconds

资源控制的时间值。

no-basic

不能设置特权类型为 basic 的资源控制值。只允许有特权的资源控制值。

no-signal

不能对资源控制值设置本地信号操作。

no-syslog

不能为此资源控制设置全局 syslog 消息操作。

deny

超出阈值时总是拒绝资源请求。

count

资源控制的计数(整数)值。

bytes

资源控制大小的单位。

使用 prctl 命令可以显示资源控制的本地值和操作。

$ prctl -n process.max-cpu-time $$
    process 353939: -ksh
    NAME    PRIVILEGE    VALUE    FLAG   ACTION              RECIPIENT
 process.max-cpu-time
         privileged   18.4Es    inf   signal=XCPU                 -
         system       18.4Es    inf   none 

为两个阈值都设置了 max (RCTL_LOCAL_MAXIMAL) 标志,并且为此资源控制定义了 inf (RCTL_GLOBAL_INFINITE) 标志。inf 值可以是无穷大,但从不会达到。因此,如同配置的那样,两个阈值都表示从不会超过的无穷大值。

资源控制执行

一个资源可以存在多个资源控制。进程模型中的每个内嵌项目级别均可存在资源控制。如果同一资源的不同容器级别上的资源控制都处于活动状态,则首先执行最小容器的控制。因此,如果同时遇到 process.max-cpu-timetask.max-cpu-time 这两个控制,则先对前者执行操作。

图 6-1 进程集合、容器关系及其资源控制集

image:图中显示了每个资源控制在其内嵌项目级别的执行。

全局监视资源控制事件

通常,进程的资源消耗情况是未知的。要获取更多信息,请尝试执行全局资源控制操作,通过 rctladm 命令可实现这些操作。使用 rctladm 可以对资源控制设置 syslog 操作。然后,如果此资源控制管理的任意实体达到阈值,则会在已配置的日志级别上记录系统消息。有关更多信息,请参见第 7 章rctladm(1M) 手册页。