本章介绍如何管理资源控制功能。
有关资源控制功能的概述,请参见第 6 章。
任务 |
说明 |
参考 |
---|---|---|
设置资源控制。 |
为 /etc/project 文件中的项目设置资源控制。 | |
获取或修改本地范围的活动进程、任务或项目的资源控制值。 |
对与系统上的活动进程、任务或项目关联的资源控制进行运行时询问和修改。 | |
在正在运行的系统上,查看或更新资源控制的全局状态。 |
查看整个系统范围内每个资源控制的全局日志状态。还在超过控制时设置 syslog 日志的级别。 | |
报告活动的进程间通信 (interprocess communication, IPC) 功能的状态。 |
显示有关活动的进程间通信 (interprocess communication, IPC) 功能的信息。查看哪些 IPC 对象正在使用项目资源。 | |
确定是否为 Web 服务器分配了足够的 CPU 容量。 |
设置对资源控制执行的全局操作。通过此操作,可以接收任何所设资源控制值太低的实体的通知。 |
此过程将名为 x-files 的项目添加到 /etc/project 文件,并为在此项目中创建的任务设置最大 LWP 数。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
使用带有 K 选项的 -projadd 命令创建名为 x-files 的项目。将在此项目中创建的每个任务的最大 LWP 数设置为 3。
# projadd -K 'task.max-lwps=(privileged,3,deny)' x-files |
使用以下方法之一查看 /etc/project 文件中的条目:
键入
# projects -l system projid : 0 comment: "" users : (none) groups : (none) attribs: . . . x-files projid : 100 comment: "" users : (none) groups : (none) attribs: task.max-lwps=(privileged,3,deny) |
键入
# cat /etc/project system:0:System::: . . . x-files:100::::task.max-lwps=(privileged,3,deny) |
执行完此过程中的步骤后,如果超级用户在项目 x-files 中创建新任务(通过 newtask 加入项目),则无法在运行此任务时创建三个以上的 LWP。以下带有注释的会话样例显示了这一原则。
# newtask -p x-files csh # prctl -n task.max-lwps $$ process: 111107: csh NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT task.max-lwps privileged 3 - deny - system 2.15G max deny - # id -p uid=0(root) gid=1(other) projid=100(x-files) # ps -o project,taskid -p $$ PROJECT TASKID x-files 73 # csh /* creates second LWP */ # csh /* creates third LWP */ # csh /* cannot create more LWPs */ Vfork failed # |
/etc/project 文件可以包含每个项目的多个资源控制设置,还可包含每个控制的多个阈值。阈值在操作子句中定义,这些子句使用逗号分隔多个值。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
使用带有 -s 和 -K 选项的 projmod 命令对项目 x-files 设置资源控制:
# projmod -s -K 'task.max-lwps=(basic,10,none),(privileged,500,deny); process.max-file-descriptor=(basic,128,deny)' x-filesone line in file |
将设置以下控制:
针对每个任务的最大 LWP 数不采取任何操作的 basic 控制。
针对每个任务的最大 LWP 数的特权 deny 控制。此控制会使所有超过最大值的 LWP 创建都失败,如前一示例如何为项目中的每个任务设置最大 LWP 数所示。
在 basic 级别对每个进程的最大文件描述符数的限制,它会强制任何超过最大数量的 open 调用均失败。
使用以下方法之一,查看文件中的条目:
键入
# projects -l . . . x-files projid : 100 comment: "" users : (none) groups : (none) attribs: process.max-file-descriptor=(basic,128,deny) task.max-lwps=(basic,10,none),(privileged,500,deny) one line in file |
键入
# cat etc/project . . . x-files:100::::process.max-file-descriptor=(basic,128,deny); task.max-lwps=(basic,10,none),(privileged,500,deny) one line in file |
使用 prctl 命令,可以对与系统上的活动进程、任务或项目关联的资源控制进行运行时询问和修改。有关更多信息,请参见 prctl(1) 手册页。
必须在未设置或更改任何资源控制的系统上使用此过程。/etc/system 文件或 project 数据库中只能有非缺省条目。
在任意进程(如正在运行的当前 shell)中使用 prctl 命令。
# prctl $$ process: 100337: -sh NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT process.max-port-events privileged 65.5K - deny - system 2.15G max deny - process.crypto-buffer-limit system 16.0EB max deny - process.max-crypto-sessions system 18.4E max deny - process.add-crypto-sessions privileged 100 - deny - system 18.4E max deny - process.min-crypto-sessions privileged 20 - deny - system 18.4E max deny - process.max-msg-messages privileged 8.19K - deny - system 4.29G max deny - process.max-msg-qbytes privileged 64.0KB - deny - system 16.0EB max deny - process.max-sem-ops privileged 512 - deny - system 2.15G max deny - process.max-sem-nsems privileged 512 - deny - system 32.8K max deny - process.max-address-space privileged 16.0EB max deny - system 16.0EB max deny - process.max-file-descriptor basic 256 - deny 100337 privileged 65.5K - deny - system 2.15G max deny - process.max-core-size privileged 8.00EB max deny - system 8.00EB max deny - process.max-stack-size basic 8.00MB - deny 100337 privileged 8.00EB - deny - system 8.00EB max deny - process.max-data-size privileged 16.0EB max deny - system 16.0EB max deny - process.max-file-size privileged 8.00EB max deny,signal=XFSZ - system 8.00EB max deny - process.max-cpu-time privileged 18.4Es inf signal=XCPU - system 18.4Es inf none - task.max-cpu-time system 18.4Es inf none - task.max-lwps system 2.15G max deny - project.max-contracts privileged 10.0K - deny - system 2.15G max deny - project.max-device-locked-memory privileged 499MB - deny - system 16.0EB max deny - project.max-port-ids privileged 8.19K - deny - system 65.5K max deny - project.max-shm-memory privileged 1.95GB - deny - system 16.0EB max deny - project.max-shm-ids privileged 128 - deny - system 16.8M max deny - project.max-msg-ids privileged 128 - deny - system 16.8M max deny - project.max-sem-ids privileged 128 - deny - system 16.8M max deny - project.max-tasks system 2.15G max deny - project.max-lwps system 2.15G max deny - project.cpu-shares privileged 1 - none - system 65.5K max none - zone.max-lwps system 2.15G max deny - zone.cpu-shares privileged 1 - none - system 65.5K max none - |
显示正在运行的当前 shell 的最大文件描述符。
# prctl -n process.max-file-descriptor $$ process: 110453: -sh NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT process.max-file-descriptor basic 256 - deny 110453 privileged 65.5K - deny - system 2.15G max deny |
此示例过程使用 prctl 命令临时添加一个新的权限值,以便拒绝在每个 x-files 项目中使用三个以上的 LWP。可将此结果与如何为项目中的每个任务设置最大 LWP 数中的结果进行对比。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
使用 newtask 加入 x-files 项目。
# newtask -p x-files |
使用带有 -p 选项的 id 命令检验是否已加入正确的项目。
# id -p uid=0(root) gid=1(other) projid=101(x-files) |
为 project.max-lwps 添加一个新的权限值,将 LWP 数限制为三个。
# prctl -n project.max-lwps -t privileged -v 3 -e deny -i project x-files |
验证结果。
# prctl -n project.max-lwps -i project x-files process: 111108: csh NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.max-lwps privileged 3 - deny - system 2.15G max deny - |
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
使用带有 -r 选项的 prctl 命令更改 process.max-file-descriptor 资源控制的最低值。
# prctl -n process.max-file-descriptor -r -v 128 $$ |
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
显示项目 group.staff 中 project.cpu-shares 的值。
# prctl -n project.cpu-shares -i project group.staff project: 2: group.staff NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.cpu-shares privileged 1 - none - system 65.5K max none |
将当前 project.cpu-shares 值 1 替换为值 10。
# prctl -n project.cpu-shares -v 10 -r -i project group.staff |
显示项目 group.staff 中 project.cpu-shares 的值。
# prctl -n project.cpu-shares -i project group.staff project: 2: group.staff NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.cpu-shares privileged 10 - none - system 65.5K max none |
使用 rctladm 命令可以对资源控制功能的全局状态进行运行时询问和修改。有关更多信息,请参见 rctladm(1M) 手册页。
例如,您可以使用带有 -e 选项的 rctladm 来启用资源控制的全局 syslog 属性。当超过控制时,便会在指定的 syslog 级别记录通知。要启用 process.max-file-descriptor 的全局 syslog 属性,请键入以下命令:
# rctladm -e syslog process.max-file-descriptor |
在不使用参数的情况下,rctladm 命令将显示每个资源控制的全局标志,包括全局类型标志。
# rctladm process.max-port-events syslog=off [ deny count ] process.max-msg-messages syslog=off [ deny count ] process.max-msg-qbytes syslog=off [ deny bytes ] process.max-sem-ops syslog=off [ deny count ] process.max-sem-nsems syslog=off [ deny count ] process.max-address-space syslog=off [ lowerable deny no-signal bytes ] process.max-file-descriptor syslog=off [ lowerable deny count ] process.max-core-size syslog=off [ lowerable deny no-signal bytes ] process.max-stack-size syslog=off [ lowerable deny no-signal bytes ] . . . |
使用 ipcs 实用程序可以显示有关活动的进程间通信 (interprocess communication, IPC) 功能的信息。有关更多信息,请参见 ipcs(1) 手册页。
您可以使用带有 -J 选项的 ipcs 来查看分配 IPC 对象所遵循的项目限制。
# ipcs -J IPC status from <running system> as of Wed Mar 26 18:53:15 PDT 2003 T ID KEY MODE OWNER GROUP PROJECT Message Queues: Shared Memory: m 3600 0 --rw-rw-rw- uname staff x-files m 201 0 --rw-rw-rw- uname staff x-files m 1802 0 --rw-rw-rw- uname staff x-files m 503 0 --rw-rw-rw- uname staff x-files m 304 0 --rw-rw-rw- uname staff x-files m 605 0 --rw-rw-rw- uname staff x-files m 6 0 --rw-rw-rw- uname staff x-files m 107 0 --rw-rw-rw- uname staff x-files Semaphores: s 0 0 --rw-rw-rw- uname staff x-files |
通过对资源控制执行全局操作,可以接收任何实体因资源控制值设置太低而失败的通知。
例如,假设您要确定 Web 服务器是否拥有处理一般工作负荷所需的 CPU。您可以分析 sar 数据以了解空闲的 CPU 时间和平均负荷值。您也可以检查扩展记帐数据以确定针对 Web 服务器进程同时运行的进程数。
但是,比较简单的方法是将 Web 服务器置于任务中。然后,可以使用 syslog 设置全局操作,以便在任务超过对应于计算机容量的预定 LWP 数时通知您。
有关更多信息,请参见 sar(1) 手册页。
使用 prctl 命令对包含 httpd 进程的任务设置特权(超级用户拥有)资源控制。将每个任务的 LWP 总数限制为 40,并禁用所有的本地操作。
# prctl -n task.max-lwps -v 40 -t privileged -d all `pgrep httpd` |
对 task.max-lwps 资源控制启用系统日志全局操作。
# rctladm -e syslog task.max-lwps |
查看工作负荷是否导致资源控制失败。
如果是,将看到 /var/adm/messages,例如:
Jan 8 10:15:15 testmachine unix: [ID 859581 kern.notice] NOTICE: privileged rctl task.max-lwps exceeded by task 19 |