本章介绍配置和使用资源上限设置守护进程 rcapd 的过程。
有关 rcapd 的概述,请参见第 10 章。
任务 |
说明 |
参考 |
---|---|---|
设置内存上限执行阈值。 |
配置一个将在可用于进程的物理内存很低时执行的上限。 | |
设置操作间隔。 |
间隔应用于由资源上限设置守护进程执行的定期操作。 | |
启用资源上限设置。 |
在系统上激活资源上限设置。 | |
禁用资源上限设置。 |
在系统上取消激活资源上限设置。 | |
报告上限和项目信息。 |
查看用于生成报告的示例命令。 | |
监视项目的驻留集大小。 |
生成有关项目驻留集大小的报告。 | |
确定项目的工作集大小。 |
生成有关项目工作集大小的报告。 | |
报告内存使用率和内存上限。 |
针对每个间隔在报告结尾列显一行有关内存使用率和上限执行的信息。 |
本节介绍了有关使用 rcapadm 命令配置资源上限设置守护进程的过程。有关更多信息,请参见rcapd 配置和 rcapadm(1M) 手册页。此外,还介绍了使用 rcapadm 为区域指定临时资源上限的过程。
如果使用时不带参数,rcapadm 将显示资源上限设置守护进程(如果已配置)的当前状态。
可以对上限进行配置,以便在可用于进程的物理内存很低时执行。有关更多信息,请参见内存上限执行阈值。
最小(和缺省)值为 0,这意味着将始终执行内存上限。要设置不同的最小值,请遵照以下过程执行操作。
成为超级用户,或者承担包括进程管理配置文件的角色。
系统管理员角色包括进程管理配置文件。有关如何创建该角色并将其指定给用户的信息,请参见《系统管理指南:安全性服务》中的“管理 RBAC(任务列表)”。
使用 rcapadm 的 -c 选项为内存上限执行设置不同的物理内存使用率值。
# rcapadm -c percent |
percent 的范围为 0 至 100。值越高,限制就越小。较高的值表示在系统的内存使用率超过此阈值之前,可以在不执行上限的情况下执行具有上限的项目的工作负荷。
要显示当前物理内存使用率和上限执行阈值,请参见报告内存使用率和内存上限执行阈值。
rcapd 操作间隔介绍了有关由 rcapd 执行的定期操作的间隔的信息。要使用 rcapadm 设置操作间隔,请遵照以下过程执行操作。
成为超级用户,或者承担包括进程管理配置文件的角色。
系统管理员角色包括进程管理配置文件。有关如何创建该角色并将其指定给用户的信息,请参见《系统管理指南:安全性服务》中的“管理 RBAC(任务列表)”。
使用 -i 选项设置间隔值。
# rcapadm -i interval=value,...,interval=value |
所有间隔值都以秒为单位指定。
可以通过三种方法在系统上启用资源上限设置。启用资源上限设置还可以使用缺省值设置 /etc/rcap.conf 文件。
成为超级用户,或者承担包括进程管理配置文件的角色。
系统管理员角色包括进程管理配置文件。有关如何创建该角色并将其指定给用户的信息,请参见《系统管理指南:安全性服务》中的“管理 RBAC(任务列表)”。
通过以下方法之一启用资源上限设置守护进程:
使用 svcadm 命令启用资源上限设置。
# svcadm enable rcap |
要启用资源上限设置守护进程,以使其现在启动并且也在每次引导系统时启动,请键入:
# rcapadm -E |
如果不是现在启用资源上限设置守护进程,而是在引导时启用它,则还应指定 -n 选项:
# rcapadm -n -E |
可以通过三种方法在系统上禁用资源上限设置。
成为超级用户,或者承担包括进程管理配置文件的角色。
系统管理员角色包括进程管理配置文件。有关如何创建该角色并将其指定给用户的信息,请参见《系统管理指南:安全性服务》中的“管理 RBAC(任务列表)”。
通过以下方法之一禁用资源上限设置守护进程:
使用 svcadm 命令禁用资源上限设置。
# svcadm disable rcap |
要禁用资源上限设置守护进程,以使其现在停止并且不会在引导系统时启动,请键入:
# rcapadm -D |
要在不停止资源上限设置守护进程的情况下禁用它,还应指定 -n 选项:
# rcapadm -n -D |
安全禁用资源上限设置守护进程
使用 svcadm 命令或带有 D 的 -rcapadm 命令可以安全地禁用 rcapd。如果中止该守护进程(请参见 kill(1) 手册页),则进程可能处于停止状态,并且需要手动重新启动。要使进程恢复运行,请使用 prun 命令。有关更多信息,请参见 prun(1) 手册页。
此过程用于分配指定区域可占用的最大内存量。此值只会持续到下次重新引导。要设置持久性上限,请使用 zonecfg 命令。
成为超级用户,或者承担包括进程管理配置文件的角色。
系统管理员角色包括进程管理配置文件。
为区域 my-zone 设置 512 MB 的最大内存值。
# rcapadm -z testzone -m 512M |
使用 rcapstat 可报告资源上限设置统计信息。使用 rcapstat 监视资源利用率说明了如何使用 rcapstat 命令生成报告。此节还介绍了报告中的列标题。rcapstat(1) 手册页也包含此信息。
以下各小节通过示例说明如何生成用于特定用途的报告。
在此示例中,为与两个用户相关联的两个项目定义了上限。user1 的上限为 50 MB,user2 的上限为 10 MB。
以下命令以 5 秒为抽样间隔生成 5 个报告。
user1machine% rcapstat 5 5 id project 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 project 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 project 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 project 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 project 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 |
输出的前三行构成了第一个报告,此报告包含自启动 rcapd 以来两个项目的上限和项目信息以及换页统计信息。对于 user1,at 和 pg 列中的数字大于零,对于 user2,这两列中的数字等于零,这表示在守护进程的历史记录中,有时 user1 超过其上限,但 user2 却没有。
后续各报告没有显示任何重要的活动。
以下示例显示了项目的 user1,此项目的 RSS 超过其 RSS 上限。
以下命令以 5 秒为抽样间隔生成 5 个报告。
user1machine% rcapstat 5 5 |
id project nproc vm rss cap at avgat pg avgpg 376565 user1 3 6249M 6144M 6144M 690M 220M 5528K 2764K 376565 user1 3 6249M 6144M 6144M 0M 131M 4912K 1637K 376565 user1 3 6249M 6171M 6144M 27M 147M 6048K 2016K 376565 user1 3 6249M 6146M 6144M 4872M 174M 4368K 1456K 376565 user1 3 6249M 6156M 6144M 12M 161M 3376K 1125K |
user1 项目具有三个积极使用物理内存的进程。pg 列中的正值表示 rcapd 在尝试通过降低项目进程的物理内存使用率来满足上限要求时,始终对内存执行页出操作。但是,rcapd 无法成功保持 RSS 低于上限值。从不断变化却并未真正减小的 rss 值可以看出这一点。只要从内存中调出页面,工作负荷便会再次使用内存,于是 RSS 值将会再次回升。这意味着项目的所有驻留内存都在被使用,并且工作集大小 (working set size, WSS) 大于上限。因此,将会强制 rcapd 对某些工作集执行页出操作以满足上限要求。在这种情况下,系统将继续频繁出现页面错误,并大量使用关联的 I/O,直到发生以下情况之一:
WSS 变小。
上限增加。
应用程序更改其内存访问模式。
在这种情况下,缩短抽样间隔可能会减小 RSS 值和上限值之间的差异,因为缩短抽样间隔会使rcapd 更频繁地对工作负荷进行抽样并执行上限。
必须创建新的页面或者系统必须在交换设备的某页面中进行复制时,便会出现页面错误。
以下示例是前一示例的延续,它使用相同的项目。
前一示例显示 user1 项目使用的物理内存超过其上限所允许的内存量。此示例显示了项目工作负荷需要的内存量。
user1machine% rcapstat 5 5 id project nproc vm rss cap at avgat pg avgpg 376565 user1 3 6249M 6144M 6144M 690M 0K 689M 0K 376565 user1 3 6249M 6144M 6144M 0K 0K 0K 0K 376565 user1 3 6249M 6171M 6144M 27M 0K 27M 0K 376565 user1 3 6249M 6146M 6144M 4872K 0K 4816K 0K 376565 user1 3 6249M 6156M 6144M 12M 0K 12M 0K 376565 user1 3 6249M 6150M 6144M 5848K 0K 5816K 0K 376565 user1 3 6249M 6155M 6144M 11M 0K 11M 0K 376565 user1 3 6249M 6150M 10G 32K 0K 32K 0K 376565 user1 3 6249M 6214M 10G 0K 0K 0K 0K 376565 user1 3 6249M 6247M 10G 0K 0K 0K 0K 376565 user1 3 6249M 6247M 10G 0K 0K 0K 0K 376565 user1 3 6249M 6247M 10G 0K 0K 0K 0K 376565 user1 3 6249M 6247M 10G 0K 0K 0K 0K 376565 user1 3 6249M 6247M 10G 0K 0K 0K 0K 376565 user1 3 6249M 6247M 10G 0K 0K 0K 0K |
在循环的中途,user1 项目的上限从 6 GB 增大到 10 GB。此增长会停止上限执行并允许驻留集大小增长(仅受计算机中的其他进程和内存量的限制)。rss 列可能会保持不变,以反映项目工作集大小 (working set size, WSS),在此示例中大小为 6247 M。这是允许项目进程在不会连续出现页面错误的情况下运行的最小上限值。
当 user1 的上限为 6 GB 时,在每隔 5 秒的抽样间隔内,由于 rcapd 会对某些工作负荷内存执行页出操作,因此 RSS 将减小,而 I/O 将增加。页出操作完成后不久,需要这些页面的工作负荷会在继续运行时再对这些页面执行页入操作。此循环会重复进行,直到在将近此示例的中途,上限增加到 10 GB。之后,RSS 保持在 6.1 GB。由于此时工作负荷的 RSS 低于上限,因此不再发生换页,还会停止与换页关联的 I/O。因此,项目需要 6.1 GB 来执行查看此项目时正在进行的工作。
另请参见 vmstat(1M) 和 iostat(1M) 手册页。
您可以使用 rcapstat 的 -g 选项报告以下内容:
以系统上安装的物理内存的百分比表示的当前物理内存使用率
由 rcapadm 设置的系统内存上限执行阈值
可使用 -g 选项针对每个间隔在报告结尾列显一行有关内存使用率和上限执行的信息。
# rcapstat -g id project nproc vm rss cap at avgat pg avgpg 376565 rcap 0 0K 0K 10G 0K 0K 0K 0K physical memory utilization: 55% cap enforcement threshold: 0% id project nproc vm rss cap at avgat pg avgpg 376565 rcap 0 0K 0K 10G 0K 0K 0K 0K physical memory utilization: 55% cap enforcement threshold: 0% |