Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1018063
  • 博文数量: 243
  • 博客积分: 3053
  • 博客等级: 中校
  • 技术积分: 2975
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 21:11
文章分类

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类:

2009-10-16 10:29:03

Part 3 Solaris 10系统资源的高级管理

这章我们来介绍系统资源的高级管理。
1 资源容器
资源容器是资源管理中的一个概念,用来形容比较封闭的自成一体的资源状态。在Solaris 10中引入资源容器的概念,目的就是更合理地划分资源,提高资源的使用效率。
当某个组织需要自己的虚拟环境(包括IP地址、磁盘存储空间和应用程序)时,容器是他们理想的选择。例如,公司可以为特定的应用设置容器,如邮件服务器、Web服务器或数据库。公司还可以根据地理区域(如中国、美国、欧洲和亚太地区)设置容器。同样,公司还可以为职能部门设置容器,如人力资源部门、研发部门和销售部门。
不同的行业会出于不同的目的而使用容器或区域。大学可以为每一位在校生提供一个区域,其中包括一个OS实例、一份系统资源和一个超级用户密码。无线公司可以为监视服务设置容器,如长途服务、本地电话服务和语音邮件。有线电视提供商或Internet服务提供商可以为DSL、电缆调制解调器或有线电视服务设置容器。金融机构可以分别为以下用户设置单独的容器:需要在数据库中进行复杂查询的用户,以及需要进行联机交易的用户。独立软件供应商(ISV)可以为购买其软件或服务的不同顾客分别设置容器或区域。
1.1 Solaris容器


图1 容器模型示意图
Solaris容器是一个帮助组织和管理物理系统资源集合的抽象层。通过使用容器,可以为应用程序的资源要求创建一份详尽的蓝图。Solaris容器模型着重解决应用程序的资源要求,如图16-1所示。此模型的要务是合理分配服务或工作负荷。服务是由应用程序提供的,对系统而言则是工作负荷。工作负荷是一组相关的进程,如一个正在执行的应用程序。
图16-1中的盒子表示容器。在盒子周围,围绕“服务”沿x、y和z轴显示了三种资源。“服务”被限制在盒子中,表示该“服务”如何被包含在容器内。在此模型中,CPU、内存和带宽是基本资源。在Solaris 10中,容器管理器(Container Manager)可完全控制上述三种基本资源:CPU、内存和带宽。
Solaris容器与Solaris主机的关系


Solaris中,容器和主机的关系如图2所示。
多个容器可同时在一个主机上处于活动状态。如果一个主机上同时存在多个容器,可以设置容器的边界,便于主机扩展和约束它们。在这种情况下,其他容器当前未使用的资源对于能够使用它们的容器来说都是可用的。最终,能够在某个主机上处于活动状态的容器数将取决于CPU数量和可用内存资源,以及每个容器保留了多少这样的资源。系统必须能够满足所有活动的容器(由应用程序的需要决定)所需要的全部资源。
Solaris容器的属性
Solaris容器具有下列属性:
 名称
 描述(可选)
 项目类型
 与容器相关联的项目名称
 与容器应用程序相关联的Solaris用户和组
 匹配表达方式(如果存在的话)
[ 本帖最后由 云杉上的蝴蝶 于 2008-4-12 02:09 编辑 ]
16-2.PNG (7.62 KB)







jnet
(2009-7-11 10:18:08)
2 项目和任务

这一节将介绍项目和容器的关系,以及在Solaris 10中,如何使用项目和任务来管理、分配资源。
项目(Projects)和任务(Tasks)的简单介绍
为了优化系统服务,有时需要对运行的系统进行工作量分析。无论是单独对从进程方面还是从用户方面来说,获得这些信息是困难的。在Solaris中,有两种工具来分析工作量:项目和任务。项目对有关工作提供网络背景方面的管理。任务提供程序组方面的管理。基于项目和任务管理机制,运行的程序可以被标准的Solaris命令所管理。
项目用于组织和管理物理系统资源集合。在实现全面服务器整合计划时,项目很有用。项目提供下列功能:
 为应用程序设置最小CPU资源和内存容量,从而平衡系统资源。
每个应用程序均可获得为其项目设置的最小CPU资源和内存容量(可选)。例如:基于应用程序的项目允许你为网络上运行的所有应用程序建立最小CPU资源和内存容量。当同一台主机上有多个项目处于活动状态时,由于每个应用程序均位于其各自的项目内,从而减少了系统资源的争用现象。在这种情况下,为每个项目设置的资源限制是由该主机上的Solaris内核实施的。
 跟踪数据中心内的资源使用情况。
将跟踪项目当前使用的资源总量,还会跟踪项目成员使用的资源量。尽管多个用户和组可能同属于一个或多个项目,但必须为每个Solaris用户指定一个默项目。Solaris用户启动的进程可以绑定到该用户所属的任何项目。项目通过使用项目成员和资源池来跟踪与控制应用程序的资源消耗。
项目和容器的关系
项目就是与主机相关联的容器。与主机关联后,项目将处于活动状态,并且也设置了属于它自己的资源。容器可以作为多个项目模板。反过来,每个项目都具有与其关联的容器。该关联容器将这些项目的共同属性存储在一个中心位置,当创建新项目时,可以参照这些共同属性创建。
项目标志符
项目标志符是用来鉴别有关任务的管理标志符。具有工作量标志的项目也可以成为用户和组的标识。一个用户或组可以属于一个或多个项目,这些项目可以表现属于它的用户或组的工作量。尽管用户必须属于默认的项目,但用户发布的程序可以关联任何用户所属于的项目。
1.用户默认项目(Projects)介绍
当登录系统的时候,用户必须被分配一个项目,用户自动成为这个项目组的成员。
 如果用户项目的属性是在/etc/user_attr扩展用户属性数据库定义的,那么定义的值就是项目的默认属性。
 如果在项目数据库中,某个项目下有user.user-id,那么这个用户就是所属项目成员。
 如果在项目数据库中,某个项目下有group.group-name,那么这个用户组就是所属项目成员。
 如果在项目数据库中,某个项目下有default标志,那么这个项目就是默认项目。
2.用useradd, usermod和passmgmt设置用户属性
可以用下列命令及-k选项在一些本地文件中来设置用户的属性:
 passmgmt:修改用户信息。
 useradd:给用户设置默认的项目。
 usermod:修改用户信息。
这些被修改的本地文件是:
/etc/group
/etc/passwd
/etc/project
/etc/shadow
/etc/user_attr
3.项目数据库介绍
你可以存储项目数据到上面介绍的本地文件、NIS服务或LDAP服务中,访问时都需要权限模块(PAM)的认证。
4.名称服务的设置
项目数据库的管理支持名称服务。名称服务是在/etc/nsswitch.conf中定义的。在默认情况下,文件列表是首先被查询的。当然也可以有其他查询次序。下面是默认次序:
project: files [nis] [ldap]
5.本地文件/etc/project文件的格式
如果你在/etc/nsswitch.conf中列出最先查询的文件,登录进程就会首先查询/etc/project文件中的项目数据库信息。
这个/etc/project文件包含一行下列形式的项目信息:
projname:projid:comment:user-list:group-list:attributes
这个信息定义如下:
 projname:项目名称。
 projid:在系统中项目惟一的号码。
 comment:项目的描述。
 user-list:用逗号分隔的属于这个项目的用户列表。
 group-list:用逗号分隔的属于这个项目的用户组列表。
 attributes:用分号分隔的name-value对,name是属性名,value是属性的值。具体见16.3.3节。
下面是默认的/etc/project文件的内容:
system:0:System:::
user.root:1:Super-User:::
noproject:2:No Project:::
default:3::::
group.staff:10::::
16.2.4 任务标志符
每次成功登录到项目中都会创建一个新的包含登录进程的任务。任务是工作中的进程的集体表现。每个任务都被自动授予一个任务ID。
每个进程都是一个任务的成员,每个任务都与一个项目相关联。此之者的关系如图3所示。


图3 项目、任务和进程的关系
所有对进程组的操作,比如信号的发送,任务都是支持的。你可以将任务绑定到processor set或者调度优先权和类。
可以用下面的方法来创建最终的任务:
 使用nwetask和-F选项的命令创建。
 所有被项目创建的任务,在使用setproject命令后,就会具有task_final标识。具有这个标识说明任务已经被创建
 在项目数据库中设置task.final属性。
管理项目与任务
1.有关项目和任务的一些命令
有关项目和任务的一些命令如表:
命 令--描 述
projects--显示项目成员;从项目数据库列出项目;打印给出项目的信息;如果没给出项目名,就列出所有项目信息;使用-l选项打印详细信息
newtask--运行Shell或专门的命令来完成新的任务;也可以被用来改变被任务或项目绑定的进程。使用-F选项可以创建最终的任务
passmgmt--更新密码口令文件信息
projadd--在/etc/project文件中增加新的项目;这个命令不能用来改变网络命名服务的项目信息
projmod--修改本地项目信息。也可以通过编辑/ect/project文件来达到修改项目信息的目的
projdel--删除本地项目信息。也可以通过编辑/ect/project文件来达到删除项目信息的目的
useradd--增加默认的项目定义到本地文件
userdel--从本地文件中删除用户账号
usermod--修改用户登录系统的信息
prstat--使用-J选项,显示当前系统项目和程序的各种统计信息||使用-T选项,显示当前系统任务和程序的各种统计信息
id--使用-p选项,显示当前项目ID、用户和组的ID
pgrep--使用-J选项,列出当前用户项目ID||使用-T选项,列出当前用户任务ID
pkill--使用-J选项,终结当前ID项目||使用-T选项,终结当前ID任务
2.如何增加和检查项目
 例16-1 增加一个名为booksite项目,项目ID为1443,并授权项目给mark用户。
# projadd -U mark -p 4113 booksite
为这个booksite项目增加一些注释:
# projmod -c ‘Book Auction Project’ booksite
检查项目内容:
# projects -l
system
projid : 0
comment: ""
users : (none)
groups : (none)
attribs:
user.root
projid : 1
comment: ""
users : (none)
groups : (none)
attribs:
noproject
projid : 2
comment: ""
users : (none)
groups : (none)
attribs:
default
projid : 3
comment: ""
users : (none)
groups : (none)
attribs:
group.staff
projid : 10
comment: ""
users : (none)
groups : (none)
attribs:
booksite
projid : 4113
comment: "Book Auction Project"
users : mark
groups : (none)
attribs:
3.如何删除/etc/project中的项目
 例16-2 删除booksite项目。
# projdel booksite
同样,查看项目输出,发现booksite项目已经不存在了。
# projects –l
查看mark用户的项目,已经变成默认:
# su - mark
# projects
default
4.如何创建新的任务
 例16-3 创建新任务。
首先,以目标项目(booksite)的成员身份登录,在booksite项目中创建新的任务:
machine% newtask -v -p booksite
16
上面创建的任务ID为16,并默认放置用户自己的Shell到这个任务中。
5.如何将活动进程移动到新的任务中
 例16-4 移动活动进程。
(1)使用pgrep命令,查看book_catalog的进程ID:
# pgrep book_catalog
8100
(2)关联这个进程到所属项目名为booksite的新任务中:
#newtask -v -p booksite -c 8100
17
(3)列出新任务中的进程ID:
# pgrep -T 17
8100
现在,book_catalog进程属于项目booksite的ID号为17的新任务。

3 资源控制


本节介绍在Solaris 10系统中管理控制资源的一些方法。
资源控制概述
在Solaris操作系统中,单个进程资源的控制被限定在扩展的任务和项目控制中,以使资源管理更为容易。资源控制是以整个系统资源为基础的。资源控制的标志是以project、task和process为前缀的。
1.资源限制和资源控制

UNIX系统有个传统的资源限制工具:rlimit。这个rlimit工具允许管理员以数字的方式限制进程消耗的资源。它包括CPU的使用时间、进程核心文件的大小等。而资源控制工具也与资源限制工具兼容,它们可以共同对应用程序的资源使用进行管理。
2.进程间的通信和资源控制

进程间的通信是通过IPC进行的。IPC允许传递或同步不同进程之间发生的信息。在Solaris 10版本以前,IPC的可调整参数是在/tc/system文件中设定的。现在资源控制通过定义内核的方法管理资源,资源控制代替了/etc/system文件中的可调整参数。
我们可以使用ipcs命令和-J选项来观察IPC实体。
3.资源控制机制

资源控制机制是用来约束系统资源的,其中进程、任务和项目的应用能防止消耗大量专门的系统资源。这个机制通过防止系统资源耗尽来引导系统管理。约束机制也能用来支持程序资源规划,并拒绝没有必要的资源申请。
4.项目属性机制

资源控制也能提供一些简单的属性给资源管理工具。比如,在公平调度类中定义的project.cpu-shares就是项目可以分享的CPU的数量。因为,项目被分配给了固定的数量资源,所以任何情况下都不能超额使用。
5.Solaris 10资源控制新特性

下面资源控制的设定代替了system V的进程间通信(IPC)的可调整参数文件/etc/system。
 project.max-shm-ids
 project.max-msg-ids
 project.max-sem-ids
 project.max-shm-memory
 process.max-sem-nsems
 process.max-sem-ops
 process.max-msg-qbytes
下列事件端口的资源控制是新增加的内容:
 project.max-device-locked-memory
 project.max-port-ids
 process.max-port-events
下面这个加密的资源控制方法也是新加的:
 project.max-crypto-memory
下面是新加的附加资源控制内容:
 project.max-lwps
 project.max-tasks
 project.max-contracts
资源控制特性
1.标准的资源控制表
标准的资源控制表
控制器名--描 述--默认单元
Project.cpu-shares--在公平调度类(FSS)中项目所能分享的CPU数额--数额
project.max-crypto-memory--能够被libpkcs11作为加密使用的核心内存数量--大小(byte)
project.max-device-locked-memory--能够被锁定的内存的总量--大小(byte)
project.max-port-ids--事件端口允许的最大量--数量
project.max-shm-ids--项目允许的共享内存的最大量--数量
project.max-sem-ids--项目允许的信号数--数量
project.max-msg-ids--项目允许的最大消息队列数--数量
project.max-shm-memory--项目允许的最大共享内存数--大小
project.max-lwps--项目中同时可用的lwp数--数量
project.max-tasks--项目中允许的最大任务数--数量
project.max-contracts--项目中允许的最大合约数--数量
task.max-cpu-time--本任务的程序可以使用的最大的CPU时间--时间(秒)
task.max-lwps--本任务的程序同时可以使用的最大lwp数--数量
process.max-cpu-time--本进程可用的最大CPU时间--时间(秒)
process.max-file-descriptor--本进程可用的最大文件描述符索引的数量--数量
process.max-file-size--本进程可用来写的最大的文件偏移量--大小(bytes)
process.max-core-size--本进程可创建的最大core文件的大小--大小(bytes)
process.max-data-size--本进程可用的最大heap memory的大小--大小(bytes)
process.max-stack-size--本进程可用的最大stack memory的大小--大小(bytes)
process.max-address-space--本进程可用的最大地址空间的大小总和--大小(bytes)
process.max-port-events--本进程每个事件端口可用的最大事件数量--数量
process.max-sem-nsems--本进程允许的信号设置的信号最大数--数量
process.max-sem-ops--本进程中每个semop call所允许的最大信号数--数量
process.max-msg-qbytes--在信息队列中的信息的最大值--大小(bytes)
process.max-msg-messages--在信息队列中的信息的最数--数量(个数)

当系统没有设置资源控制时,你也可以使用默认的资源控制。资源控制的默认值存在/etc/system文件和项目数据库中。可以使用prctl命令显示这些默认值。
2.资源控制的数值(value)和特权级(Privilege Levels)

每个控制资源的极限数值是和用户的特权级相联系的。特权级共有以下三种。
 基本级(basic):它可以修改自己的进程调用。
 特权级(privileged):它只能被超级用户所修改。
 系统级(system):它是系统运行时的固定数值。
资源控制是系统或资源提供者的定义资源数值,这些数值表明当前有多少资源可以被利用。
3.资源控制的全局动作和本地动作

在资源使用达到资源控制的极限值时,会触发全局动作或本地动作。全局动作有以下特性:
 显示系统资源控制的全局状态。
 设置系统的日志活动。
对于系统资源活动,全局动作可以设定系统日志,你可以设定系统日志到专门的日志级。可能设定的日志级有以下这些:
 debug
 info
 notice
 warning
 err
 crit
 alert
 emerg
注意,默认的资源控制是没有设定系统日志的。
本地动作有以下三种。
 none:当使用资源超过资源控制极限值时,没有任何动作发生。
 Deny:禁止使用资源超过资源控制极限值。
 signal=:当使用资源超过资源控制极限值时,发信号。
并不是所有的动作都可以应用到每个资源控制中。比如,deny动作就不能应用到project.cpu-shares资源控制中。
4.资源控制的标记和属性

在系统中每个资源控制都有几个相关联的属性。这些属性被定义为标记(flag)。
全局标记不能被修改,但是能被rctladm命令所显示。比如显示process.max-cpu-time的全局值和全局动作。
$ rctladm process.max-cpu-time
process.max-cpu-time syslog=off [ lowerable no-deny cpu-time inf seconds ]
全局标记:
 lowerable:不需要超级用户的特权。
 no-deny:当极限值被超过后,访问资源也不被禁止。
 cpu-time:当极限值被突破后,SIGXCPU信号将被发送。
 seconds:该资源控制的时间值。
本地标记可以被prctl命令修改。使用prctl-n同样可显示process.max-cpu-time的本地值和本地动作。
$ prctl -n process.max-cpu-time $$
process 353939: -ksh
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
process.max-cpu-time
privileged 18.4Es inf signal=XCPU -
system 18.4Es inf none
本地标记中,inf表示指定的值是无限制的。Max也是一个本地标记,表示设定可用资源的最大值。
3.3 管理资源
1.用于资源控制的命令介绍

用于资源控制的命令:
命 令--描 述
ipcs--观察进程间通信的工具
prctl--在本地范围内,允许在运行的时候进行查询和修正资源控制的工具
rctladm--在全局范围内,允许在运行的时候查询和修正资源控制的工具

2.设置资源控制
 例16-5 设置项目中的任务同时可以使用的最大lwp数。
(1)成为超级用户或授权角色用户。
(2)使用projadd命令和-K的选项来创建项目x-file,并设置项目中每个任务的最大的LWP数量为3:
# projadd -K ’task.max-lwps=(privileged,3,deny)’ x-files
(3)查看/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)
(4)创建新任务,并将csh进程与x-file项目关联起来。
# newtask -p x-files csh
(5)显示任务情况,有三种方法。
a)使用prctl命令显示:
# 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 –
b)使用id命令显示:
# id -p
uid=0(root) gid=1(other) projid=100(x-files)
c)使用ps命令显示:
# ps -o project,taskid -p $$
PROJECT TASKID
x-files 73
(6)运行csh程序以产生多进程,可以预见产生进程数目不能超过3。
# csh /* creates second LWP */
# csh /* creates third LWP */
# csh /* cannot create more LWPs */
Vfork failed
#
3.如何使用prctl命令

使用prctl命令可以在系统运行中调整对活动进程、任务或者项目的资源控制。
 例16-6 显示系统中默认的资源控制。
# 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 -
.
.
.
 例16-7 显示给定的某个资源控制的详细信息。
# prctl -n proc ess.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 -
 例16-8 如何改变项目中资源控制的值。
(1)显示项目名为group.staff中资源控制的值:
# 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 -
(2)使用-r选项将改变项目中资源控制的值由1改为10:
# prctl -n project.cpu-shares -v 10 -r -i project group.staff
(3)检查项目中资源控制的值:
# 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 -
4.使用rctladm命令管理资源

 例16-9 使用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 ]
使用-e选项来激活系统日志,将资源控制信息记录在日志中:
# rctladm -e syslog process.max-file-descriptor
5.使用ipcs显示进程间的通信

 例16-10 使用-J选项显示项目和IPC的信息。
# ipcs -J
IPC status from 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
6.如何测定Web服务器分配的CPU资源是否够用

 例16-11 测定Web服务器分配的CPU资源是否够用。
步骤:
(1)使用prctl命令将含有httpd进程的任务放置在特权级的资源控制中,且限制每个任务的LWP数为40,并关闭所有的本地动作:
# prctl -n task.max-lwps -v 40 -t privileged -d all 'pgrep httpd'
(2)在task.max-lwps资源控制中打开系统日志:
# rctladm -e syslog task.max-lwps
(3)如果设定无误,在日志/var/adm/messages就会有如下的信息出现:
Jan 8 10:15:15 testmachine unix: [ID 859581 kern.notice]
NOTICE: privileged rctl task.max-lwps exceeded by task 19
4 公平共享调度(FSS)

之前已经介绍了在进程的调度类中有一种名为公平共享调度类的。这一节我们就主要介绍此调度类的有关知识。
公平共享调度主要是指根据工作量的重要性,控制可用CPU时间在工作量之间的分配。工作量重要性是由分配给每个工作量的CPU时间的份额数表示的。在Solaris操作系统中,默认的调度类是分时调度,它使得所有的进程都按照时间的分配得到等同的资源。
CPU共享的设置
项目是容器的具体体现,可以设置一个公平共享调度类的容器来管理CPU的共享。设置CPU的共享是通过管理项目数据库来完成的。比如,在/etc/project文件中设置项目x-flies的共享份额为5:
x-files:100::::project.cpu-shares=(privileged,5,none)
如果在项目运行的时候改变了项目数据库中的共享CPU的份额,这个改变不会马上起作用,必须要重新启动项目后才有作用。
如果想在系统运行的时候临时改变份额而不改变项目的数据库,可以使用prctl命令来完成。比如,改变项目x-files的CPU共享份额为3,就可以使用下面的命令:
# prctl -r -n project.cpu-shares -v 3 -i project x-files
查看prctl(1)帮助页可以得到更多的信息。
FSS和处理器设置
处理器设置(Processor Set)是独立的CPU资源组合。由于它的计算公式比较复杂,我们采用举例的方式说明。
假设服务器中有8个CPU,我们将处理器设置分为3个组,它们分别是Processor Set 1,2和3,其中Processor Set 1中放2个CPU,Processor Set 2中放4个CPU,Processor Set 3中放2个CPU。现在有项目A、B和C,假设A项目享有CPU的份额为1,B项目为2,C项目为3。这时候我们可以随意将项目A、B和C放到任何处理器设置组中,但是它们的共享份额是固定的。比如,我们将项目A、B和C都放在Processor Set 1中;而在Processor Set 2中放B和C项目;在Processor Set 3中只放C项目组。这样就会出现图4的结果。


图4 处理器设置示意图
需要说明的是,在Processor Set 2中,虽然没有项目A,只有项目B和C,但它们的份额并没有改变,还是2:3。
可见,通过处理器设置组的设置,CPU资源的分配更加灵活了。
16.4.3 FSS和其他调度类
除了FSS调度类之外,Solaris系统还有分时调度类(TS)、交互调度类和固定优先级调度类等其他调度类。我们也知道,可以将系统的CPU分给几个处理器设置组来管理。这里要注意的是应该避免将某些调度类混合应用在一个处理器设置组中。比如,FSS、TS、IA和FX应用在一个处理器设置组就会带来意想不到的后果。
对于一个系统来说,你可以混合TS、IA、FX和FSS到一个系统中。但是,最好一个处理器设置组就设置一个调度类。你可以例外地将TS和IA类混合用到一个处理器设置组中,或者在没有设置处理器设置组的系统中。
因为实时调度类(RT)使用的优先级是100~159,不同于FSS调度类(0~59),所以RT可以和FSS共存在一个处理器设置中。
管理公平共享调度类
1.FSS命令介绍
下表中的命令提供了公平共享调度类的主要管理端口。
命 令--描 述
priocntl--显示或设置专门进程的调度参数;||移动活动进程到不同的调度类
ps--显示运行的进程信息;||鉴别是哪个调度类的处理器设置组在工作
dispadmin--设置系统默认的调度类
2.监控FSS
可以使用prstat命令来监控项目中的CPU使用状况。
使用-J选项来监控系统中项目的CPU使用状况:
% prstat –J
使用-C选项来监控处理器组中项目的CPU使用状况:
% prstat -J -C pset-list
3.配置FSS
使用dispadmin命令在系统中设定默认调度类为FSS:
# dispadmin -d FSS
这个命令在下次系统启动后生效。在系统重新启动后,系统中每个进程都运行在FSS调度类。
你也能手动地将进程从一个调度类移动到另外一个调度类,并且不改变默认的调度类,也不需要重新启动计算机。下面命令是将进程从TS调度类移动到FSS调度类,比如移动进程的PID为1。
# priocntl -s -c FSS -i pid 1
如果移动所有的TS调度类的进程到FSS调度类中,就需要下面的命令:
# priocntl -s -c FSS -i class TS
如果我们要移动ID为10项目中的所有进程到FSS类中,使用下面命令:
# priocntl -s -c FSS -i projid 10
需要注意的是,上面使用priocntl命令的设置在系统重新启动后将不再保存。

5 使用资源上限守护程序管理物理内存

资源上限执行守护程序rcapd(1MSRM)及其关联的实用程序为资源上限的执行和管理提供了方法。在任何指定的时间只能运行rcapd的一个例程。守护程序会周期性地对定义了物理内存上限的进程集合的资源利用情况进行取样。如果进程消耗的资源超过了上限数量,并且符合其他条件,则守护程序会采取措施,将进程消耗的资源总量降低到低于上限数量的水平。
虚拟内存系统将物理内存划分为区段(称为页)。为了将数据从文件读入内存中,虚拟内存系统会一次读取一页,或者换入文件。为了减少资源消耗,守护程序可能会将不常用的页换出或重新定位到物理内存外的区域。
使用rcapadm(1MSRM)可配置资源上限守护程序。rcapadm 也可用于在全局层面上管理资源上限。可以在要求时通过发送配置更改的SIGHUP(请参阅kill(1))或通过配置间隔(请参阅rcapadm(1MSRM)将其集成到(rcapd)中。请注意,你必须拥有超级用户特权才能配置守护程序。如果在使用时不带参数,则rcapadm显示资源上限守护程序的当前状态(若已配置此程序)。
使用rcapstat(1SRM)可为每个定义的上限报告资源上限执行守护程序的统计数据。
限制物理内存使用的属性
可以在项目中定义物理内存资源的限制。建立常驻内存大小的限制可以在项目数据库中完成。
rcap.max-rss:用来限制项目中的程序可以使用的物理内存的总数,单位是byte。
比如,在/etc/project文件中设置常驻内存大小限制为10亿字节:
db:100::db,root::rcap.max-rss=10737418240
当然,你也可以用projmod命令来在/etc/project文件设置rcap.max-rss属性:
# projmod -s -K rcap.max-rss=10GB db
这时,在/etc/project文件中也会包含下列内容:
db:100::db,root::rcap.max-rss=10737418240
使用资源上限守护程序
1.设置内存上限执行值

可以配置上限,使其不会在进程可用的物理内存很低之前执行。最小(默认)值是 0,表示始终执行内存上限。要为内存上限执行设置不同的最小物理内存使用量,请键入:
# rcapadm -c percent
percent值应在0到100的范围内。高的值表示较少的限制,意味着项目的工作量执行没有限制,直到系统内存的利用率超过这个百分比的限定。可通过使用rcapstat命令的-g选项来获得当前的全局物理内存使用量及其上限。
2.设置操作间隔

可以调整由rcapd执行的周期性操作的间隔。要重设间隔,请使用-i选项。
# rcapadm -i interval=value,...,interval=value
所有间隔以秒为单位指定。下表描述了各个间隔及其默认值。
操作间隔:
间 隔--以秒为单位的默认值--描 述
scan--15--rcapd扫描新进程的频率。最小值为1秒
sample--5--进程驻留大小的取样频率。最小值为1秒
report--5--rcapd为rcapstat所更新的换页统计数据的频率。如果设为 0,则不更新统计数据
config--60--重新配置的频率。在重新配置事件中,rcapd检查其要更新的配置文件,并为新lnode或项目上限扫描lnode(限制)数据库或项目数据库,或者扫描新集合

如果指定给rcapstat的间隔比指定给rcapd的短(通过rcapadm(1MSRM)指定),则某些间隔的输出可能为零。这是因为rcapd更新统计数据的频率不会比通过rcapadm指定的间隔高,而且此间隔独立于由rcapstat使用的取样间隔,并较此准确性要低。
3.打开资源上限守护程序

要启用资源上限守护程序,以使其立即启动,以及在每次启动系统时也启动,请键入:
# rcapadm –E
要在启动时启用资源上限守护程序而不影响其当前运行状态,还要指定-n选项:
# rcapadm -n -E
4.关闭资源上限守护程序

要禁用资源上限守护程序,以使其立即停止并在启动系统时不会启动,请键入:
# rcapadm –D
要禁用资源上限守护程序而不影响其当前运行状态,还要指定-n选项:
# rcapadm -n -D
监视资源上限守护程序
1.rcapstat命令介绍

使用rcapstat命令可产生关于由rcapd设置上限的报告。
rcapstat [Interval] [count]
通过此命令,你可以设置取样间隔,并指定报告频率,其参数具体意义是:
 Interval:以秒为单位指定取样间隔。默认间隔为5 s。
 count:指定重复统计的次数。默认情况下,rcapstat会直到收到终止信号或者rcapd进程结束时才报告统计数据。
由rcapstat产生的第一个报告中的换页统计数据显示自守护程序启动以来的活动情况。后续报告反映自上次报告产生以来的活动情况。
rcapstat报告的列标题意义
标 题--描 述
id--项目ID
project--项目名称
nproc--项目中的进程数
vm--项目中的总虚拟内存大小,包括所有映射文件和设备,以千字节(K)、兆字节(M)或十亿字节(G)为单位
rss--项目的总驻留大小(RSS),以千字节(K)、兆字节(M)或十亿字节(G)为单位,未将共享的对象计算在内
cap--为项目定义的RSS上限。有关如何指定内存上限的信息,请参阅 rcapd(1MSRM)
at--rcapd在上一个rcapstat样本之后试图换出的总内存量
avgat--rcapd在上一个rcapstat样本之后发生的每个样本周期中试图换出的平均内存量。可透过rcapadm1MSRM设置(rcapd)样本集合RSS的频率
pg--在上一个rcapstat样本之后rcapd成功换出的总内存量。rcapd会换出最不常用的页面
avgpg--rcapd在上一个rcapstat样本之后发生的每个样本周期中成功换出的平均内存量估计值。可通过rcapadm设置rcapd样本进程RSS大小的频率

2.通过 rcapstat 产生报告
 例16-12 使用rcapstat报告上限和项目信息。
为与两个用户关联的两个项目定义上限。user1的上限为50MB,user2的上限为10MB。以下命令以5秒的取样间隔产生报告,将产生五次报告,在每个样本后产生一次。
usermachine% 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启动以来的换页统计数据。at和pg列分别是大于零的数字(对于user1)和零(对于user2),这表示在守护程序的历史记录中的部分时间里,user1超过其上限,但user2没有超过其上限。
后续报告包含自前一间隔以来的换页统计数据,但显示的活动都不重要。
 例16-13 使用rcapstat监视项目的RSS。
项目名为user1的项目,RSS的值超过了RSS的上限。以下命令以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项目有3个进程使用物理内存。pg列中的非零值表示rcapd因其试图通过降低项目进程的物理内存使用量来符合上限的要求而不断地换出内存。然而,rcapd未成功,这可以从不断变化且未显示相应减少的rss列的值中看出。这意味着项目中所有的驻留内存正被积极使用并且工作集的大小还比上限大。在此情况下,系统将继续保持高的页面故障率及关联的I/O,直到下面的情况发生:
 工作集大小减少
 上限上升
 应用程序更改其内存访问模式
 例16-14 确定项目的工作集大小。
此示例是例16-13的延续,并且使用相同的项目;例16-13显示了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项目的内存上限从6GB增加到了10GB。内存上限的增长也允许工作集增长。rss列能稳定反映项目的工作集大小,在这个例子中是6247M。这个数字是项目进程不在发生频繁的页面故障的最低界限。
可以使用rcapstat的-g选项来报告以下内容:
 rcapadm(1MSRM)设置的全局内存使用上限。
 当前使用的内存量占安装在系统中的所有物理内存的百分比。
 例16-15 报告全局内存上限。
# 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%


6 动态资源池


资源池的概述
1.资源池
  下载 (6.72 KB)

2008-4-12 02:51
图5 资源池的结构

资源池也称为池,是Solaris 9和Solaris 10的一种软件配置机制,可用于对主机资源进行分区。资源池可使你分配工作量,并能确保资源不被浪费。它为处理器设置组(processor set)和调度类的分配提供了持久的配置机制。三者关系如图16-4所示。
资源池可以绑定系统中的各种资源。可创建以下几种池:
 pool1: pset_default
 pool2: pset1
 pool3: pset1, pool.scheduler="FSS"
每个在/etc/project文件中的项目条目都有一个资源池与之相关联,并用project.pool来表示其属性。我们可以用projmod命令在/etc/project文件中增加一个资源池属性。比如在sales项目中增加一个名为mypool的资源池属性:
# projmod -a -K project.pool=mypool sales
资源池为系统事件和应用加载提供了动态的调整机制。这些调整是系统管理员为了系统的性能而预先设定的,系统自动执行这些调整。当系统动态资源分配需要时,执行程序poold就会执行调整。poold程序周期地检查系统负载并测算为了系统维持最佳状态而是否干涉。
当资源池启动时,default pool和default processor set就已经设置。可以人为地创立一些资源池和处理器设置组,但一个CPU只能属于一个处理器设置组。用户定义的资源池和处理器设置组可以取消,但默认的资源池和默认的处理器设置组却不会被取消。
2.资源池的框架

/etc/pooladm.conf是静态资源池的设置文件。这些设置文件表现了系统管理员想要设置的专门资源池的属性。
内核保存着资源和资源池的部署信息,这就是资源的动态设置信息。它表现为某一时刻系统的资源池性能。这些动态设置可以通过pooladm命令查看。更改这些动态设置的间接方法就是应用静态的设置文件,直接的方法就是使用poolcfg命令和-d选项。可以有多个静态资源池设置文件在系统中同时存在,你可以在不同的时间分别激活它们,也可以在crontab中设定好定期执行pooladm命令。
在默认情况下,资源池框架是不被激活的。
用于资源池框架和poold程序的命令如下:
 pooladm(1M)
 poolcfg(1M)
 poold(1M)
 libpool(3LIB)
保存在/etc/pooladm.conf文件中的是静态设置。当系统启动的时候,如果这个文件存在,这个资源池框架将启动并且将其中的静态设置应用在系统之上。
包括动态设置的所有资源池设置,都包含着下列的元素:
 system:受系统行为影响的特性
 pool:一个资源池的定义
 pset:一个处理器设置组的定义
 cpu:一个处理器的定义
所有这些元素都能被用来操控资源池框架的行为。比如,pool.importance属性表示所给的资源池的重要属性。
3.在系统中起用资源池

在系统中起用用户定义的资源池,有以下方法:
 当系统启动时,启动脚本检查/etc/pooladm.conf文件是否存在。如果存在,pooladm命令则调用这个设置启动资源池。
 当系统已经在运行的时候,资源池可能活动着也可能没有启动。可以用pooladm命令启动它。
4.创建资源池的设置文件

当系统启动后,创建/etc/pooladm.conf有两种方法:
 你可以用pooladm命令和-s选项去发现系统当前资源并将结果放到配置文件中。这个方法是首选的。所有的活动资源和系统组件都可以被资源池工具操控并记录。
 也可以用pooladm -c、discover或create system name等命令来创建新的资源池设置。
注意可以用poolcfg或libpool去修改/etc/pooladm.conf文件,但不要直接编辑这个文件。
管理动态资源池
本节主要介绍动态资源池的管理方法。
1.在系统中启动和关闭资源池框架

可以用pooladm命令来启动和关闭资源池框架。只有启动后,资源池才能被操控。在关闭后,资源池不能被操控。启动和关闭都需要由具有相应管理角色的用户或超级用户来进行。
启动资源池框架:
# pooladm -e
关闭资源池框架:
# pooladm -d
2.设置资源池

(1)如何创建静态资源池设置。
使用/usr/sbin/pooladm命令和-s选项可以创建一个与当前动态设置相匹配的静态设置文件。如果不给新生成的文件指定路径和名称,文件名和路径在默认情况下将被启动,这就是/etc/pooladm.conf。
 例16-16 创建静态资源池设置。
a)创建与当前动态资源池相匹配的静态资源池设置文件:
# pooladm –s
b)查看新创建的文件:
# poolcfg -c info
system tester
string system.comment
int system.version 1
boolean system.bind-default true
int system.poold.pid 177916
pool pool_default
int pool.sys_id 0
boolean pool.active true
boolean pool.default true
int pool.importance 1
string pool.comment
pset pset_default
pset pset_default
int pset.sys_id -1
boolean pset.default true
uint pset.min 1
uint pset.max 65536
string pset.units population
uint pset.load 10
uint pset.size 4
string pset.comment
boolean testnullchanged true
cpu
int cpu.sys_id 3
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 2
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 1
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 0
string cpu.comment
string cpu.status on-line]
c)将在/etc/pooladm.conf文件中的静态资源池设置提交给系统:
# pooladm –c
d)如果将拷贝的动态资源池设置文件创建在/tmp/backup目录中,则使用下面的命令创建资源池设置:
# pooladm -s /tmp/backup
(2)如何修改资源池设置。
为了加强资源管理,可以在资源池的设置增加一个处理器设置组(processor set)。
 例16-17 将名为pset_batch的处理器设置组关联到名为pool_batch的资源池中。
a)首先,创建处理器设置组。
# poolcfg -c ’create pset pset_batch (uint pset.min = 2; uint pset.max = 10)’
b)创建名为pool_batch的资源池:
# poolcfg -c ’create pool pool_batch’
c)将处理器设置组与资源池关联:
# poolcfg -c ’associate pool pool_batch (pset pset_batch)’
d)显示资源池设置信息:
# poolcfg -c info
system tester
string system.comment kernel state
int system.version 1
boolean system.bind-default true
int system.poold.pid 177916
pool pool_default
int pool.sys_id 0
boolean pool.active true
boolean pool.default true
int pool.importance 1
string pool.comment
pset pset_default
pset pset_default
int pset.sys_id -1
boolean pset.default true
uint pset.min 1
uint pset.max 65536
string pset.units population
uint pset.load 10
uint pset.size 4
string pset.comment
boolean testnullchanged true
cpu
int cpu.sys_id 3
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 2
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 1
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 0
string cpu.comment
string cpu.status on-line
pool pool_batch
boolean pool.default false
boolean pool.active true
int pool.importance 1
string pool.comment
pset pset_batch
pset pset_batch
int pset.sys_id -2
string pset.units population
boolean pset.default true
uint pset.max 10
uint pset.min 2
string pset.comment
boolean pset.escapable false
uint pset.load 0
uint pset.size 0
cpu
int cpu.sys_id 5
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 4
string cpu.comment
string cpu.status on-line
e)将/etc/pooladm.conf文件内容提交:
# pooladm -c
(3)如何关联资源池和调度类
设置pool.scheduler属性可以将资源池绑定的所有进程关联到一个调度类。
 例16-18 在例16-17的基础上,关联pool_batch资源池和公平共享调度类(FSS)。
a)修改资源池的属性与FSS关联:
# poolcfg -c ’modify pool pool_batch (string pool.scheduler="FSS")’
b)显示修改信息:
# poolcfg -c info
system tester
string system.comment kernel state
int system.version 1
boolean system.bind-default true
int system.poold.pid 177916
pool pool_default
int pool.sys_id 0
boolean pool.active true
boolean pool.default true
int pool.importance 1
string pool.comment
pset pset_default
pset pset_default
int pset.sys_id -1
boolean pset.default true
uint pset.min 1
uint pset.max 65536
string pset.units population
uint pset.load 10
uint pset.size 4
string pset.comment
boolean testnullchanged true
cpu
int cpu.sys_id 3
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 2
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 1
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 0
string cpu.comment
string cpu.status on-line
pool pool_batch
boolean pool.default false
boolean pool.active true
int pool.importance 1
string pool.comment
string pool.scheduler FSS
pset batch
pset pset_batch
int pset.sys_id -2
string pset.units population
boolean pset.default true
uint pset.max 10
uint pset.min 2
string pset.comment
boolean pset.escapable false
uint pset.load 0
uint pset.size 0
cpu
int cpu.sys_id 5
string cpu.comment
string cpu.status on-line
cpu
int cpu.sys_id 4
string cpu.comment
string cpu.status on-line
c)提交/etc/pooladm.conf文件信息到系统:
# pooladm -c
(4)如何使用poolcfg命令将命令文件提交到系统。
我们可以编辑一个命令文件,内容为资源池的设置,然后用poolcfg命令提交到系统中。
 例16-19 提交命令文件到系统。
a)创建命令文件:
$ cat > poolcmds.txt
create system tester
create pset pset_batch (uint pset.min = 2; uint pset.max = 10)
create pool pool_batch
associate pool pool_batch (pset pset_batch)
b)成为超级用户或具有进程管理角色的用户。
c)运行提交命令:
# /usr/sbin/poolcfg -f poolcmds.txt
3.转移资源

使用transfer子命令和poolcfg命令的-c及-d选项来转移在内核中的资源。-d选项表示在内核中完成转移资源。
下面两个例子分别使用了转移资源的两种方法。
 例16-20 将处理器设置组pset1中的2个CPU移动到处理器设置组pset2中。
# poolcfg -dc ’transfer 2 from pset pset1 to pset2’
如果知道CPU的ID,也可以使用下列方法:
 例16-21 将2个ID为0和2的CPU转移到名为pset_large的处理器设置组中。
# poolcfg -dc "transfer to pset pset_large (cpu 0; cpu 2)"
4.激活和删除资源池设置

(1)激活资源池设置。
使用下面命令激活资源池设置:
# pooladm -c
如果在激活之间需要检查设置是否正确,可以使用下面的命令,并将结果输出:
# pooladm -n -c /home/admin/newconfig
/home/admin/newconfig为输出文件。
(2)删除资源池设置。
删除当前的活动的资源池设置,并将所关联的所有资源,比如处理器设置组等,都恢复到默认的资源设置状态。使用下面命令:
# pooladm –x
5.设置资源池的属性并且绑定资源池

你可以设置project.pool属性来关联资源池和项目。绑定进程到资源池有两种方法:
 用poolbind命令来绑定专门的进程到资源池。
 用项目数据库中的project.pool属性来绑定新的任务。
(1)使用poolbind命令来绑定进程到资源池。
 例16-22 绑定当前进程到ohare资源池。
# poolbind -p ohare $$
检查绑定结果:
$ poolbind -q $$
155509 ohare
(2)绑定任务或项目到资源池。
 例16-23 绑定airmiles项目中所有的进程到laguardia资源池:
# poolbind -i project -p laguardia airmiles
(3)设置项目中的project.pool属性。
在项目数据库中增加project.pool属性的命令:
# projmod -a -K project.pool=poolname project
(4)使用项目属性绑定进程到不同的资源池。
 例16-24 使用项目属性绑定进程到不同的资源池。
在项目数据库中有studio和backstage两个资源池定义,内容如下:
user.paul:1024::::project.pool=studio
user.george:1024::::project.pool=studio
user.ringo:1024::::project.pool=backstage
passes:1027::paul::project.pool=backstage
在这个设置中,用户paul默认项目是user,且启动的所有进程都绑定了studio资源池。用户paul可以修改自己进程所绑定的资源池。使用newtask-l命令可以使用户paul作为passes项目的成员登录,而passes项目绑定backstage资源池。
(1)使用户paul作为passes项目的成员:
$ newtask -l -p passes
(2)检查资源池绑定结果:
$ poolbind -q $$
6384 pool backstage
6.使用poolstat报告资源池的统计信息


使用不带任何选项的poolstat命令时,输出的信息有资源池的ID、资源池的名称和资源池中处理器设置组的资源统计信息。
machine% poolstat
pset
id pool size used load
0 pool_default 4 3.6 6.2
1 pool_sales 4 3.3 8.4
 例16-25 在5秒中产生3次统计。
machine% poolstat 5 3
pset
id pool size used load
46 pool_sales 2 1.2 8.3
0 pool_default 2 0.4 5.2
pset
id pool size used load
46 pool_sales 2 1.4 8.4
0 pool_default 2 1.9 2.0
pset
id pool size used load
46 pool_sales 2 1.1 8.0
0 pool_default 2 0.3 5.0
使用poolstat命令和-r选项来报告资源集的统计信息。
 例16-26 使用poolstat命令和-r选项来报告资源集的统计信息。
machine% poolstat -r pset
id pool type rid rset min max size used load
0 pool_ default pset -1 pset_default 1 65K 2 1.2 8.3
6 pool_ sales pset 1 pset_sales 1 65K 2 1.2 8.3
2 pool_other pset 1 pset_default 1 10K 2 0.4 5.2
注意,本例中资源集pset_default同时属于多个资源池。


阅读(2944) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~