只有在您使用的是带有 Solaris 8 SPARC 平台版本 的 Solaris Resource Manager 1.3 时,才能使用此功能。
资源上限是对进程集合消耗的资源(如物理内存或 CPU 时间)设置的最大值。
在 Solaris Resource Manager 1.3 中,资源上限的执行使您可以调节附加到 lnode 或某个项目的进程集合所消耗的物理内存资源。有关项目的信息,请参阅 project(4)。
通过向某个 lnode 或项目添加属性,可以为该 lnode 或项目定义物理内存资源上限(取决于所使用的模式)。
用于分配驻留大小 (RSS) 上限的 lnode 属性是:
rss.limit 属性以指定的单位定义了应用于附加到 lnode 的进程集合的物理内存上限。上限必须是正数。
rss.limit 的设置通过 limadm(1MSRM) 进行。例如,要为 lnode oracle 设置 10-十亿字节的 RSS 上限,则键入:
# /usr/srm/sbin/limadm set rss.limit=10G oracle |
用于设置 RSS 上限的项目属性是:
rcap.max-rss 属性以字节为单位定义了附加到项目的进程可以使用的物理内存总量。上限必须是正数。
rcap.max-rss 在 project(4) 数据库中进行配置。例如,项目数据库中的下面一行为名称为 oracle 的项目设置了 RSS 上限。
oracle:100::oracle,root::rcap.max-rss=10737418240 |
资源上限执行守护程序 rcapd(1MSRM) 及其关联的实用程序为资源上限的执行和管理提供了方法。在任何指定的时间只能运行 rcapd 的一个例程。守护程序会周期性地对定义了物理内存上限的进程集合的资源利用情况进行取样。如果进程消耗的资源超过了上限数量,并且符合其它条件,则守护程序会采取措施,将进程消耗的资源总量降低到低于上限数量的水平。
虚拟内存系统将物理内存划分为区段(称为页)。为了将数据从文件读入内存中,虚拟内存系统会一次读取一页,或者换入文件。为了减少资源消耗,守护程序可能会将不常用的页换出或重新定位到物理内存外的区域。
使用 rcapadm(1MSRM) 可配置资源上限守护程序。rcapadm 也可用于在全局层面上管理资源上限。可以在要求时通过发送配置更改的 SIGHUP(请参阅 kill1)或通过配置间隔(请参阅 (rcapadm)1MSRM)将其集成到 (rcapd) 中。您必须拥有超级用户特权才能配置守护程序。如果在使用时不带参数,则 rcapadm 显示资源上限守护程序的当前状态(若已配置此程序)。
使用 rcapstat(1SRM) 可为每个定义的上限报告资源上限执行守护程序的统计数据。
使用 rcapadm(1MSRM) 可配置此守护程序。
支持两种操作模式,lnode 和项目。
要执行为 lnode 定义的上限,并忽略为项目定义的上限,请键入:
# rcapadm -m lnode |
要执行为项目定义的上限,并忽略为 lnode 定义的上限,请键入:
# rcapadm -m project |
您可以调整由 rcapd 执行的周期性操作的间隔。要重设间隔,请使用-i 选项。
# rcapadm -i interval=value,...,interval=value |
所有间隔以秒为单位指定。下表描述了各个间隔及其缺省值。
间隔 |
以秒为单位的缺省值 |
描述 |
---|---|---|
scan |
15 |
rcapd 扫描新进程的频率。最小值为 1 秒。 |
sample |
5 |
进程驻留大小的取样频率。最小值为 1 秒。 |
report |
5 |
rcapd 为 rcapstat 所更新的换页统计数据的频率。如果设为 0,则不更新统计数据。 |
config |
60 |
重新配置的频率。在重新配置事件中,rcapd 检查其要更新的配置文件,并为新 lnode 或项目上限扫描 lnode(限制)数据库或项目数据库,或者扫描新集合。 |
如果指定给 rcapstat 的间隔比指定给 rcapd 的短(通过 rcapadm(1MSRM) 指定),则某些间隔的输出可能为零。这是因为 rcapd 更新统计数据的频率不会比通过 rcapadm 指定的间隔高,而且此间隔独立于且准确性低于由 rcapstat 使用的取样间隔。
可以配置上限,使其不会在进程可用的物理内存很低之前执行。最小(缺省)值是 0,表示始终执行内存上限。要为内存上限执行设置不同的最小物理内存使用量,请键入:
# rcapadm -c percent |
percent 值应在 0 到 100 的范围内。可通过使用 rcapstat 命令的 -g 选项来获得当前的全局物理内存使用量及其上限。请参阅 报告全局内存上限。
要启用资源上限守护程序,以使其立即启动和在每次启动系统时也启动,请键入:
# rcapadm -E |
要在启动时启用资源上限守护程序而不影响其当前运行状态,还要指定-n 选项:
# rcapadm -n -E |
要禁用资源上限守护程序,以使其立即停止并在启动系统时不会启动,请键入:
# rcapadm -D |
要禁用资源上限守护程序而不影响其当前运行状态,还要指定 -n 选项:
# rcapadm -n -D |
如果被终止,rcapd 可能会将进程停留在停止状态。请参阅 kill(1)。使用 rcapadm -D 或者 SIGTERM 可以正确终止 rcapd。
使用 rcapstat 命令可产生关于由 rcapd 设置上限的 lnode 或项目的报告。您可以设置取样间隔,并指定报告频率。
以秒为单位指定取样间隔。缺省间隔为 5 秒。
指定重复统计的次数。缺省情况下,rcapstat 会直到收到终止信号或者 rcapd 进程结束时才报告统计数据。
由 rcapstat 产生的第一个报告中的换页统计数据显示自守护程序启动以来的活动情况。后续报告反映自上次报告产生以来的活动情况。
下表定义了 rcapstat 报告的列标题。
进程集合的 lnode ID 或附加到项目的进程的项目 ID。
集合 ID 的类型(项目或 lnode)。
集合中的进程数。
进程集合的总虚拟内存大小,包括所有映射文件和设备,以千字节 (K)、兆字节 (M) 或十亿字节 (G) 为单位。
进程集合的总驻留大小 (RSS),以千字节 (K)、兆字节 (M) 或十亿字节 (G) 为单位,未将共享的对象计算在内。
为项目或 lnode 定义的 RSS 上限。有关如何指定内存上限的信息,请参阅 rcapd(1MSRM)。
rcapd 在上一个 rcapstat 样本之后试图换出的总内存量。
rcapd 在上一个 rcapstat 样本之后发生的每个样本周期中试图换出的平均内存量。可透过 rcapadm1MSRM 设置 (rcapd) 样本集合 RSS 的频率。
在上一个 rcapstat 样本之后 rcapd 成功换出的总内存量。rcapd 会换出最不常用的页面。
rcapd 在上一个 rcapstat 样本之后发生的每个样本周期中成功换出的平均内存量估计值。可通过 rcapadm 设置 rcapd 样本进程 RSS 大小的频率。
本节中的示例说明如何使用 rcapstat 来监视已定义物理内存上限的进程集合的资源使用情况。
为与两个用户关联的两个 lnode 定义上限。user1 的上限为 50 兆字节,user2 的上限为 10 兆字节。
以下命令以 5 秒的取样间隔产生报告。将产生五次报告,在每个样本后产生一次。
usermachine% rcapstat 5 5 id lnode nproc vm rss cap at avgat pg avgpg 112270 user1 24 123M 35M 50M 50M 0K 3312K 0K 78194 user2 1 2368K 1856K 10M 0K 0K 0K 0K id lnode nproc vm rss cap at avgat pg avgpg 112270 user1 24 123M 35M 50M 0K 0K 0K 0K 78194 user2 1 2368K 1856K 10M 0K 0K 0K 0K id lnode nproc vm rss cap at avgat pg avgpg 112270 user1 24 123M 35M 50M 0K 0K 0K 0K 78194 user2 1 2368K 1928K 10M 0K 0K 0K 0K id lnode nproc vm rss cap at avgat pg avgpg 112270 user1 24 123M 35M 50M 0K 0K 0K 0K 78194 user2 1 2368K 1928K 10M 0K 0K 0K 0K id lnode nproc vm rss cap at avgat pg avgpg 112270 user1 24 123M 35M 50M 0K 0K 0K 0K 78194 user2 1 2368K 1928K 10M 0K 0K 0K 0K |
输出的前三行构成第一个报告,它包含两个 lnode 的上限和 lnode 信息,以及自 rcapd 启动以来的换页统计数据。at 和 pg 列分别是大于零的数字(对于 user1)和零(对于 user2),这表示在守护程序的历史记录中的部分时间里, user1 超过其上限,但 user2 没有超过其上限。
后续报告包含自前一间隔以来的换页统计数据,但显示的活动都不重要。
limadm(1MSRM) 命令可用于降低 lnode 的内存上限,这使得上限的限制性更强。在下一个配置间隔之后,rcapd 将执行新的上限(请参阅 rcapadm(1MSRM))。也可以发送信号,使 rcapd 立即执行新的上限。
admin# limadm set rss.limit=30M user1 admin# pkill -HUP rcapd |
以下命令以 5 秒的取样间隔产生报告。将产生五次报告,在每个样本后产生一次。
admin# rcapstat 5 5 id lnode nproc vm rss cap at avgat pg avgpg 112270 user1 24 123M 35M 30M 50M 0K 3312K 0K 78194 user2 1 2368K 1856K 10M 0K 0K 0K 0K id lnode nproc vm rss cap at avgat pg avgpg 112270 user1 24 123M 36M 30M 52M 52M 632K 632K 78194 user2 1 2368K 2096K 10M 0K 0K 0K 0K id lnode nproc vm rss cap at avgat pg avgpg 112270 user1 24 123M 33M 30M 57M 52M 816K 632K 78194 user2 1 2368K 1968K 10M 0K 0K 0K 0K id lnode nproc vm rss cap at avgat pg avgpg 112270 user1 24 123M 27M 30M 4792K 4792K 40K 40K 78194 user2 1 2368K 1144K 10M 0K 0K 0K 0K id lnode nproc vm rss cap at avgat pg avgpg 112270 user1 24 123M 27M 30M 0K 0K 0K 0K 78194 user2 1 2368K 1144K 10M 0K 0K 0K 0K |
当上限从 50 兆字节降低到 30 兆字节时,rcapd 通过试图换出 6 兆字节的超过上限值的驻留内存量来作出响应。目标达到了;但有少量超过。
以下命令以 5 秒的取样间隔产生报告。将产生五次报告,在每个样本后产生一次。
user1machine% rcapstat 5 5 |
id project nproc vm rss cap at avgat pg avgpg 376565 user1 57 209M 46M 10M 440M 220M 5528K 2764K 376565 user1 57 209M 44M 10M 394M 131M 4912K 1637K 376565 user1 56 207M 43M 10M 440M 147M 6048K 2016K 376565 user1 56 207M 42M 10M 522M 174M 4368K 1456K 376565 user1 56 207M 44M 10M 482M 161M 3376K 1125K |
在此示例中,项目 user1 拥有超过其物理内存上限的 RSS。pg 列中的非零值表示 rcapd 因其试图通过降低项目进程的物理内存使用量来符合上限的要求而不断地换出内存。然而, rcapd 未成功,这可以从不断变化且未显示相应减少的 rss 值中看出。这意味着应用程序的驻留内存正被积极使用,迫使 rcapd 影响工作集。在此情况下,系统将继续保持高的页面故障率及关联的 I/O,直到工作集大小减少,上限上升,或应用程序更改其内存访问模式。
以下示例是上一个示例的延续,并且使用相同的项目。
example% rcapstat 5 5 id project nproc vm rss cap at avgat pg avgpg 376565 user1 56 207M 44M 10M 381M 191M 15M 7924K 376565 user1 56 207M 46M 10M 479M 160M 2696K 898K 376565 user1 56 207M 46M 10M 424M 141M 7280K 2426K 376565 user1 56 207M 43M 10M 401M 201M 4808K 2404K 376565 user1 56 207M 43M 10M 456M 152M 4800K 1600K 376565 user1 56 207M 44M 10M 486M 162M 4064K 1354K 376565 user1 56 207M 52M 100M 191M 95M 1944K 972K 376565 user1 56 207M 55M 100M 0K 0K 0K 0K 376565 user1 56 207M 56M 100M 0K 0K 0K 0K 376565 user1 56 207M 56M 100M 0K 0K 0K 0K 376565 user1 56 207M 56M 100M 0K 0K 0K 0K 376565 user1 56 207M 56M 100M 0K 0K 0K 0K |
通过禁止上限执行、增加项目上限或更改最小上限执行内存压力值(请参阅 rcapadm(1MSRM)),驻留集可成为工作集。rss 列的值可能稳定不变,以显示项目工作集的大小,如此示例中所示。这是允许项目进程在没有引致永久性的页面故障的情况下运行的最小上限值。
您可以使用 rcapstat 的 -g 选项来报告以下内容:
rcapadm(1MSRM 设置的全局内存使用上限)
当前使用的内存量占安装在系统中的所有物理内存的百分比
有关更多信息,请参阅 rcapadm(1MSRM)、rcapd(1MSRM)、rcapstat(1SRM)、limadm(1MSRM) 和 project(4)。