Solaris Resource Manager 1.3 系统管理指南

第 8 章 使用资源上限守护程序管理物理内存


注意:

只有在您使用的是带有 Solaris 8 SPARC 平台版本 的 Solaris Resource Manager 1.3 时,才能使用此功能。


资源上限是对进程集合消耗的资源(如物理内存或 CPU 时间)设置的最大值。

在 Solaris Resource Manager 1.3 中,资源上限的执行使您可以调节附加到 lnode 或某个项目的进程集合所消耗的物理内存资源。有关项目的信息,请参阅 project(4)。

限制物理内存利用率的属性

通过向某个 lnode 或项目添加属性,可以为该 lnode 或项目定义物理内存资源上限(取决于所使用的模式)。

用于分配驻留大小 (RSS) 上限的 lnode 属性是:

rss.limit

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 属性以字节为单位定义了附加到项目的进程可以使用的物理内存总量。上限必须是正数。

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

进程驻留大小的取样频率。最小值为 1 秒。 

report

5  

rcapdrcapstat 所更新的换页统计数据的频率。如果设为 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 或项目的报告。您可以设置取样间隔,并指定报告频率。

interval

以秒为单位指定取样间隔。缺省间隔为 5 秒。

count

指定重复统计的次数。缺省情况下,rcapstat 会直到收到终止信号或者 rcapd 进程结束时才报告统计数据。

rcapstat 产生的第一个报告中的换页统计数据显示自守护程序启动以来的活动情况。后续报告反映自上次报告产生以来的活动情况。

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

id

进程集合的 lnode ID 或附加到项目的进程的项目 ID。

lnode/project

集合 ID 的类型(项目lnode)。

nproc

集合中的进程数。

vm

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

rss

进程集合的总驻留大小 (RSS),以千字节 (K)、兆字节 (M) 或十亿字节 (G) 为单位,未将共享的对象计算在内。

cap

为项目或 lnode 定义的 RSS 上限。有关如何指定内存上限的信息,请参阅 rcapd(1MSRM)。

at

rcapd 在上一个 rcapstat 样本之后试图换出的总内存量。

avgat

rcapd 在上一个 rcapstat 样本之后发生的每个样本周期中试图换出的平均内存量。可透过 rcapadm1MSRM 设置 (rcapd) 样本集合 RSS 的频率。

pg

在上一个 rcapstat 样本之后 rcapd 成功换出的总内存量。rcapd 会换出最不常用的页面。

avgpg

rcapd 在上一个 rcapstat 样本之后发生的每个样本周期中成功换出的平均内存量估计值。可通过 rcapadm 设置 rcapd 样本进程 RSS 大小的频率。

透过 rcapstat 产生报告

本节中的示例说明如何使用 rcapstat 来监视已定义物理内存上限的进程集合的资源使用情况。

使用 rcapstat 报告上限和 Lnode 信息

为与两个用户关联的两个 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 启动以来的换页统计数据。atpg 列分别是大于零的数字(对于 user1)和零(对于 user2),这表示在守护程序的历史记录中的部分时间里, user1 超过其上限,但 user2 没有超过其上限。

后续报告包含自前一间隔以来的换页统计数据,但显示的活动都不重要。

降低 Lnode 的上限

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 兆字节的超过上限值的驻留内存量来作出响应。目标达到了;但有少量超过。

使用 rcapstat 监视项目的 RSS

以下命令以 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)rcapd(1MSRM)rcapstat(1SRM)limadm(1MSRM) 和 project(4)。