系统管理指南:Oracle Solaris Containers-资源管理和 Oracle Solaris Zones

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

使用资源上限设置守护进程 rcapd,您可以调节已定义资源上限的项目中运行的进程所占用的物理内存。

Solaris 10 8/07: 如果在系统中运行区域,则可以从全局区域中使用 rcapd 来控制非全局区域中物理内存的占用情况。请参见第 18 章

本章包含以下主题:

有关使用 rcapd 功能的过程,请参见第 11 章

在使用资源上限设置守护进程控制物理内存方面的新增功能

Solaris 10: 现在可以使用 projmod 命令在 /etc/project 文件中设置 rcap.max-rss 属性。

Solaris 10 11/06:增加了有关将资源上限设置守护进程作为 Solaris 服务管理工具 (Service Management facility, SMF) 中的一项服务进行启用和禁用的信息。

有关 Solaris 10 新增功能的完整列表以及 Solaris 发行版的说明,请参见《Oracle Solaris 10 9/10 新增功能》

资源上限设置守护进程介绍

资源上限是对资源(如物理内存)占用设定的上限。支持按项目设置物理内存上限。

资源上限设置守护进程及其关联的实用程序提供了物理内存资源上限执行和管理机制。

资源上限与资源控制一样,可以使用 project 数据库中项目条目的属性进行定义。但是,资源控制由内核同步执行,而资源上限由资源上限设置守护进程在用户级别上异步执行。在异步执行过程中,守护进程所用的抽样间隔会导致轻微的延迟。

有关 rcapd 的信息,请参见 rcapd(1M) 手册页。有关项目和 project 数据库的信息,请参见第 2 章project(4) 手册页。有关资源控制的信息,请参见第 6 章

资源上限设置工作原理

守护进程重复对具有物理内存上限的项目的资源利用率进行抽样。它所使用的抽样间隔由管理员指定。有关其他信息,请参见确定抽样间隔。当系统的物理内存使用率超过上限执行的阈值并且满足其他条件时,守护进程便会采取措施将具有内存上限的项目的资源使用率降到等于或低于上限的水平。

虚拟内存系统将物理内存分为多个段,这些段称为页面。在 Solaris 内存管理子系统中,页面是物理内存的基本单元。在将数据从文件读入内存时,虚拟内存系统一次读入文件的一页,或者说对文件执行页入操作。为了减少资源占用,守护进程可以对不常用的页面执行页出操作,即将其重新放置到交换设备中,该设备是位于物理内存以外的区域。

守护进程通过调整项目工作负荷驻留集相对其工作集的大小来管理物理内存。驻留集是驻留在物理内存中的一组页面。工作集是指处理工作负荷过程中实际使用的一组页面。工作集会随着时间的推移发生变化,具体取决于进程的运行模式以及正在处理的数据类型。理想的情况是,每个工作负荷可以访问的物理内存都足以使其工作集一直驻留在物理内存中。但是,工作集还可以使用辅助磁盘存储器来容纳物理内存之外的存储器。

在给定时间只能运行一个 rcapd 实例。

限制项目物理内存使用率的属性

要定义项目的物理内存资源上限,请通过为 project 数据库条目添加以下属性来设定驻留集大小 (resident set size, RSS) 上限:

rcap.max-rss

项目中的进程可用的物理内存总量(字节)。

例如,/etc/project 文件中的以下行将项目 db 的 RSS 上限设置为 10 GB。


db:100::db,root::rcap.max-rss=10737418240

注 –

系统可以将指定的上限值舍入为页面大小。


您可以使用 projmod 命令在 /etc/project 文件中设置 rcap.max-rss 属性:


# projmod -s -K rcap.max-rss=10GB db

然后,/etc/project 文件将包含以下行:


db:100::db,root::rcap.max-rss=10737418240

rcapd 配置

您可以使用 rcapadm 命令配置资源上限设置守护进程。可以执行以下操作:

要配置守护进程,您必须拥有超级用户权限,或您的配置文件列表中有进程管理配置文件。进程管理角色和系统管理员角色都包含进程管理配置文件。

可以根据配置间隔(请参见rcapd 操作间隔)或者在需要时通过发送 SIGHUP(请参见 kill(1) 手册页),将配置更改并入 rcapd

如果使用时不带参数,rcapadm 将显示资源上限设置守护进程(如果已配置)的当前状态。

以下各小节将讨论上限执行、上限值以及 rcapd 操作间隔。

在安装有区域的系统上使用资源上限设置守护进程

可以在配置区域时通过设置 capped-memory 资源,来控制该区域的驻留集大小 (resident set size, RSS) 的使用情况。有关更多信息,请参见Solaris 10 8/07:物理内存控制和 capped-memory 资源。您可以区域(包括全局区域)中运行 rcapd,以便对该区域中的项目执行内存上限。

您可以为指定区域可占用的最大内存量设置一个临时上限(该值可持续到下次重新引导)。请参见如何为区域指定临时资源上限

如果要在某个区域中使用 rcapd 来控制已定义资源上限的项目中运行的进程所占用的物理内存,则必须在此区域中配置该守护进程。

为位于不同的区域中的应用程序选择内存上限时,通常不必考虑这些应用程序驻留在不同的区域中。但每区域服务则例外。每区域服务会占用内存。在确定系统的物理内存量和内存上限时,必须考虑此内存占用情况。


注 –

您不能在 lx 标记区域中运行 rcapd。但是,您可以从全局区域中使用该守护进程来在标记区域中设置内存上限。


内存上限执行阈值

内存上限执行阈值是系统中触发上限执行的物理内存使用百分比。当系统超过此使用率时,便会执行上限。应用程序和内核使用的物理内存包括在此百分比中。此使用百分比确定执行内存上限的方式。

在执行上限时,会对项目工作负荷中的内存执行页出操作。

某个工作负荷最多可以使用大小等于其上限的物理内存。只要系统内存使用率低于内存上限执行阈值,工作负荷便可使用更多的内存。

要设置上限执行值,请参见如何设置内存上限执行阈值

确定上限值

如果项目上限设置得太低,就没有足够的内存来保证工作负荷在正常情况下有效地执行。由于工作负荷需要更多内存而产生的分页操作会对系统性能造成负面影响。

上限设置得太高的项目可能会在超过其上限值之前占用可用物理内存。在这种情况下,物理内存由内核而不是 rcapd 进行有效管理。

在确定项目的上限时,应考虑到以下因素。

对 I/O 系统的影响

守护进程可以尝试在抽样使用率超过项目上限时降低项目工作负荷的物理内存使用率。在上限执行过程中,将使用交换设备和包含工作负荷映射的文件的其他设备。交换设备的性能是确定经常超过其上限的工作负荷的性能的重要因素。执行工作负荷类似于在具有等同于工作负荷上限的物理内存量的计算机上运行该工作负荷。

对 CPU 使用率的影响

守护进程的 CPU 使用率随着它已设置上限的项目工作负荷中的进程数和工作负荷的地址空间大小而变化。

守护进程的少部分 CPU 时间用在对每个工作负荷使用情况进行的抽样上。向工作负荷中添加进程会增加对使用率进行抽样所用的时间。

守护进程的另一部分 CPU 时间用在超过上限时执行上限上。所用的时间与涉及的虚拟内存量成比例。所用的 CPU 时间会根据工作负荷的地址空间总大小的相应更改而延长或缩短。此信息在 rcapstat 输出的 vm 列中显示。有关更多信息,请参见使用 rcapstat 监视资源利用率rcapstat(1) 手册页。

有关共享内存的报告

rcapd 守护进程报告与其他进程共享的内存页的 RSS,或在与合理的准确估算同样的进程中的多次映射。如果不同项目中的进程共享同一内存,那么将为共享该内存的所有项目为 RSS 总数计算该内存。

估算可用于广泛使用共享内存的工作负荷(如数据库)。对于这些数据库工作负荷,您也可以使用 prstat 命令的 -J-Z 选项的输出对项目的常规使用进行抽样,以便确定适当的初始上限值。有关更多信息,请参见 prstat(1M) 手册页。

rcapd 操作间隔

您可以调整 rcapd 所执行的定期操作的间隔。

所有间隔都以秒为单位指定。下表介绍了 rcapd 操作及其缺省间隔值。

操作 

缺省间隔值(秒) 

说明 

scan

15 

对加入或保留项目工作负荷的进程进行扫描的间隔秒数。最小值为 1 秒。 

sample

对驻留集大小和后续上限执行进行抽样的间隔秒数。最小值为 1 秒。 

report

5  

对分页统计信息进行更新的间隔秒数。如果设置为 0,则不更新统计信息,并且 rcapstat 的输出也不是最新的。

config

60 

重新配置的间隔秒数。在重新配置事件中,rcapadm 读取配置文件以获得更新,并扫描 project 数据库以查找新的或已修改的项目上限。向 rcapd 发送 SIGHUP 会立即执行重新配置。

要调整间隔,请参见如何设置操作间隔

确定 rcapd 扫描间隔

扫描间隔控制 rcapd 查找新进程的频率。在运行有多个进程的系统上,完全扫描这些进程列表会花费较多时间,因此,最好可以延长间隔,以便缩短所用的总 CPU 时间。但是,扫描间隔也代表进程为了纳入具有上限的工作负荷而必须存在的最短时间。如果工作负荷运行多个短期进程,则在延长扫描间隔的情况下,rcapd 无法将进程纳入工作负荷。

确定抽样间隔

使用 rcapadm 配置的抽样间隔是指,在对工作负荷使用情况进行抽样和执行上限(如果超过该上限)这两个操作之间 rcapd 等待的最短时间。如果缩短此间隔,在多数情况下,rcapd 会更频繁地执行上限,从而可能会因换页导致 I/O 增加。但是,较短的抽样间隔也可以减小特定工作负荷的物理内存使用率突然增加而给其他工作负荷带来的影响。抽样之间的窗口(其中,工作负荷可能不受限制地占用内存并且可能从其他具有上限的工作负荷中获取内存)会缩小。

如果为 rcapstat 指定的抽样间隔小于使用 rcapadmrcapd 指定的间隔,则某些间隔的输出可能为零。发生这种情况是因为 rcapd 更新统计信息的间隔大于使用 rcapadm 指定的间隔。使用 rcapadm 指定的间隔与 rcapstat 所用的抽样间隔无关。

使用 rcapstat 监视资源利用率

使用 rcapstat 可以监视具有上限的项目的资源利用率。要查看 rcapstat 报告示例,请参见使用 rcapstat 生成报告

您可以为报告设置抽样间隔并指定重复统计信息的次数。

interval

按秒指定抽样间隔。缺省间隔为 5 秒。

count

指定重复统计信息的次数。缺省情况下,rcapstat 会一直报告统计信息,直至收到终止信号或出现 rcapd 进程。

rcapstat 发布的第一个报告中的分页统计信息显示自启动守护进程以来执行的活动。后续报告反映自发布最后一个报告以来执行的活动。

下表定义 rcapstat 报告中的列标题。

rcapstat 列标题

说明 

id

具有上限的项目的 ID。 

project

项目名称。 

nproc

项目中的进程数。 

vm

项目中的进程所用的总虚拟内存大小(包括所有映射的文件和设备),以千字节 (K)、兆字节 (M) 或千兆字节 (G) 为单位。 

rss

项目中进程的总驻留集大小 (resident set size, RSS) 的估算量,以千字节 (K)、兆字节 (M) 或千兆字节 (G) 为单位,没有考虑共享的页面。 

cap

为项目定义的 RSS 上限。有关如何指定内存上限的信息,请参见限制项目物理内存使用率的属性rcapd(1M) 手册页。

at

自上次 rcapstat 抽样以来,rcapd 尝试对其执行页出操作的内存总量。

avgat

自上次 rcapstat 抽样以来,rcapd 在所出现的每个抽样周期中尝试对其执行页出操作的平均内存量。使用 rcapadm 可以设置 rcapd 对集合 RSS 进行抽样的速率。请参见rcapd 操作间隔

pg

自上次 rcapstat 抽样以来,rcapd 成功对其执行页出操作的内存总量。

avgpg

自上次 rcapstat 抽样以来,rcapd 在所出现的每个抽样周期中成功对其执行页出操作的平均内存量估算值。使用 rcapadm 可以设置 rcapd 对进程 RSS 大小进行抽样的速率。请参见rcapd 操作间隔

用于 rcapd 的命令

命令参考 

说明 

rcapstat(1)

监视具有上限的项目的资源利用率。 

rcapadm(1M)

配置资源上限设置守护进程,显示已配置的资源上限设置守护进程的当前状态,以及启用或禁用资源上限设置。 

rcapd(1M)

资源上限设置守护进程。