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

第 11 章 管理资源上限设置守护进程(任务)

本章介绍配置和使用资源上限设置守护进程 rcapd 的过程。

有关 rcapd 的概述,请参见第 10 章

配置和使用资源上限设置守护进程(任务图)

任务 

说明 

参考 

设置内存上限执行阈值。 

配置一个将在可用于进程的物理内存很低时执行的上限。 

如何设置内存上限执行阈值

设置操作间隔。 

间隔应用于由资源上限设置守护进程执行的定期操作。 

如何设置操作间隔

启用资源上限设置。 

在系统上激活资源上限设置。 

如何启用资源上限设置

禁用资源上限设置。 

在系统上取消激活资源上限设置。 

如何禁用资源上限设置

报告上限和项目信息。 

查看用于生成报告的示例命令。 

报告上限和项目信息

监视项目的驻留集大小。 

生成有关项目驻留集大小的报告。 

监视项目的 RSS

确定项目的工作集大小。 

生成有关项目工作集大小的报告。 

确定项目的工作集大小

报告内存使用率和内存上限。 

针对每个间隔在报告结尾列显一行有关内存使用率和上限执行的信息。 

报告内存使用率和内存上限执行阈值

使用 rcapadm 管理资源上限设置守护进程

本节介绍了有关使用 rcapadm 命令配置资源上限设置守护进程的过程。有关更多信息,请参见rcapd 配置rcapadm(1M) 手册页。此外,还介绍了使用 rcapadm 为区域指定临时资源上限的过程。

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

Procedure如何设置内存上限执行阈值

可以对上限进行配置,以便在可用于进程的物理内存很低时执行。有关更多信息,请参见内存上限执行阈值

最小(和缺省)值为 0,这意味着将始终执行内存上限。要设置不同的最小值,请遵照以下过程执行操作。

  1. 成为超级用户,或者承担包括进程管理配置文件的角色。

    系统管理员角色包括进程管理配置文件。有关如何创建该角色并将其指定给用户的信息,请参见《系统管理指南:安全性服务》中的“管理 RBAC(任务列表)”。

  2. 使用 rcapadm-c 选项为内存上限执行设置不同的物理内存使用率值。


    # rcapadm -c percent
    

    percent 的范围为 0 至 100。值越高,限制就越小。较高的值表示在系统的内存使用率超过此阈值之前,可以在不执行上限的情况下执行具有上限的项目的工作负荷。

另请参见

要显示当前物理内存使用率和上限执行阈值,请参见报告内存使用率和内存上限执行阈值

Procedure如何设置操作间隔

rcapd 操作间隔介绍了有关由 rcapd 执行的定期操作的间隔的信息。要使用 rcapadm 设置操作间隔,请遵照以下过程执行操作。

  1. 成为超级用户,或者承担包括进程管理配置文件的角色。

    系统管理员角色包括进程管理配置文件。有关如何创建该角色并将其指定给用户的信息,请参见《系统管理指南:安全性服务》中的“管理 RBAC(任务列表)”。

  2. 使用 -i 选项设置间隔值。


    # rcapadm -i interval=value,...,interval=value 
    

    注 –

    所有间隔值都以秒为单位指定。


Procedure如何启用资源上限设置

可以通过三种方法在系统上启用资源上限设置。启用资源上限设置还可以使用缺省值设置 /etc/rcap.conf 文件。

  1. 成为超级用户,或者承担包括进程管理配置文件的角色。

    系统管理员角色包括进程管理配置文件。有关如何创建该角色并将其指定给用户的信息,请参见《系统管理指南:安全性服务》中的“管理 RBAC(任务列表)”。

  2. 通过以下方法之一启用资源上限设置守护进程:

    • 使用 svcadm 命令启用资源上限设置。


      # svcadm enable rcap
      
    • 要启用资源上限设置守护进程,以使其现在启动并且也在每次引导系统时启动,请键入:


      # rcapadm -E
      
    • 如果不是现在启用资源上限设置守护进程,而是在引导时启用它,则还应指定 -n 选项:


      # rcapadm -n -E
      

Procedure如何禁用资源上限设置

可以通过三种方法在系统上禁用资源上限设置。

  1. 成为超级用户,或者承担包括进程管理配置文件的角色。

    系统管理员角色包括进程管理配置文件。有关如何创建该角色并将其指定给用户的信息,请参见《系统管理指南:安全性服务》中的“管理 RBAC(任务列表)”。

  2. 通过以下方法之一禁用资源上限设置守护进程:

    • 使用 svcadm 命令禁用资源上限设置。


      # svcadm disable rcap
      
    • 要禁用资源上限设置守护进程,以使其现在停止并且不会在引导系统时启动,请键入:


      # rcapadm -D
      
    • 要在不停止资源上限设置守护进程的情况下禁用它,还应指定 -n 选项:


      # rcapadm -n -D
      

    提示 –

    安全禁用资源上限设置守护进程


    使用 svcadm 命令或带有 D-rcapadm 命令可以安全地禁用 rcapd。如果中止该守护进程(请参见 kill(1) 手册页),则进程可能处于停止状态,并且需要手动重新启动。要使进程恢复运行,请使用 prun 命令。有关更多信息,请参见 prun(1) 手册页。

Procedure如何为区域指定临时资源上限

此过程用于分配指定区域可占用的最大内存量。此值只会持续到下次重新引导。要设置持久性上限,请使用 zonecfg 命令。

  1. 成为超级用户,或者承担包括进程管理配置文件的角色。

    系统管理员角色包括进程管理配置文件。

  2. 为区域 my-zone 设置 512 MB 的最大内存值。


    # rcapadm -z testzone -m 512M
    

使用 rcapstat 生成报告

使用 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 以来两个项目的上限和项目信息以及换页统计信息。对于 user1atpg 列中的数字大于零,对于 user2,这两列中的数字等于零,这表示在守护进程的历史记录中,有时 user1 超过其上限,但 user2 却没有。

后续各报告没有显示任何重要的活动。

监视项目的 RSS

以下示例显示了项目的 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,直到发生以下情况之一:

在这种情况下,缩短抽样间隔可能会减小 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 选项报告以下内容:

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