使用 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% |