Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1299583
  • 博文数量: 554
  • 博客积分: 10425
  • 博客等级: 上将
  • 技术积分: 7555
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 09:49
文章分类

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-09 18:51:07


使用扩展记帐功能
第5 章• 管理扩展记帐(任务) 63
basic pid,uid,gid,cpu,time,command,tty,flag
task:
extended taskid,projid,cpu,time,host,mstate,anctaskid,zone
basic taskid,projid,cpu,time
flow:
extended
saddr,daddr,sport,dport,proto,dsfield,nbytes,npkts,action,ctime,lseen,projid,uid
basic saddr,daddr,sport,dport,proto,nbytes,npkts,action
 如何取消激活进程记帐、任务记帐和流记帐
要取消激活进程记帐、任务记帐和流记帐,请使用带有-x 选项的acctadm 命令分别禁用每
个记帐。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《System
Administration Guide: Basic Administration》中的“Using the Solaris Management ToolsWith
RBAC (Task Map)”。
禁用进程记帐。
# acctadm -x process
禁用任务记帐。
# acctadm -x task
禁用流记帐。
# acctadm -x flow
检验是否已禁用任务记帐、进程记帐和流记帐。
# acctadm
Task accounting: inactive
Task accounting file: none
Tracked task resources: extended
Untracked task resources: none
1
2
3
4
5
使用扩展记帐功能
64 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
Process accounting: inactive
Process accounting file: none
Tracked process resources: extended
Untracked process resources: host
Flow accounting: inactive
Flow accounting file: none
Tracked flow resources: extended
Untracked flow resources: none
使用libexacct 的Perl 接口
如何递归列显exacct 对象的内容
使用以下代码可以递归列显exacct 对象的内容。请注意,此功能作为
Sun::Solaris::Exacct::Object::dump() 函数由库提供。此功能还可以通过
ea_dump_object() 公用函数提供。
sub dump_object
{
my($obj, $indent) = @_;
my$istr = ’ ’ x $indent;
#
# Retrieve the catalog tag. Because we are
# doing this in an arraycontext, the
# catalog tag will be returned as a (type, catalog, id)
# triplet, where each member of the triplet will behave as
使用libexacct 的Perl 接口
第5 章• 管理扩展记帐(任务) 65
# an integer or a string, depending on context.
# If instead this next line provided a scalar context, e.g.
# my$cat = $obj->catalog()->value();
# then $cat would be set to the integer value of the
# catalog tag.
#
= $obj->catalog()->value();
#
# If the object is a plain item
#
if ($obj->type() == &EO_ITEM) {
#
# Note: The ’%s’ formats provide s string context, so
# the components of the catalog tag will be displayed
# as the symbolic values. If we changed the ’%s’
# formats to ’%d’, the numeric value of the components
# would be displayed.
#
printf("%sITEM\n%s Catalog = %s|%s|%s\n",
$istr, $istr, @cat);
$indent++;
#
使用libexacct 的Perl 接口
66 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
# Retrieve the value of the item. If the item contains
# in turn a nested exacct object (i.e., an item or
# group),then the value method will return a reference
# to the appropriate sort of perl object
# (Exacct::Object::Item or Exacct::Object::Group).
# We could of course figure out that the item contained
# a nested item orgroup byexamining the catalog tag in
# @cat and looking for a type of EXT_EXACCT_OBJECT or
# EXT_GROUP.
#
my$val = $obj->value();
if (ref($val)) {
# If it is a nested object, recurse to dump it.
dump_object($val, $indent);
} else {
# Otherwise it is just a ’plain’ value, so
# displayit.
printf("%s Value = %s\n", $istr, $val);
}
#
# Otherwise we know we are dealing with a group. Groups
# represent contents as a perl list or array(depending on
# context), so we can process the contents of the group
使用libexacct 的Perl 接口
第5 章• 管理扩展记帐(任务) 67
# with a ’foreach’ loop, which provides a list context.
# In a list context the value method returns the content
# of the group as a perl list, which is the quickest
# mechanism, but doesn’t allow the group to be modified.
# If we wanted to modifythe contents of the group we could
# do so like this:
# my$grp = $obj->value(); # Returns an arrayreference
# $grp->[0] = $newitem;
# but accessing the group elements this wayis much slower.
#
} else {
printf("%sGROUP\n%s Catalog = %s|%s|%s\n",
$istr, $istr, @cat);
$indent++;
# ’foreach’ provides a list context.
foreach my$val ($obj->value()) {
dump_object($val, $indent);
}
printf("%sENDGROUP\n", $istr);
}
}
如何创建新的组记录并将其写入文件
使用以下脚本可以创建新的组记录并将其写入名为/tmp/exacct 的文件。
使用libexacct 的Perl 接口
68 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
#!/usr/perl5/5.6.1/bin/perl
use strict;
use warnings;
use Sun::Solaris::Exacct qw(:EXACCT_ALL);
# Prototype list of catalog tags and values.
= (
[ &EXT_STRING | &EXC_DEFAULT | &EXD_CREATOR => "me" ],
[ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_PID => $$ ],
[ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_UID => $< ],
[ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_GID => $( ],
[ &EXT_STRING | &EXC_DEFAULT | &EXD_PROC_COMMAND => "/bin/rec" ],
);
# Create a new group catalog object.
my$cat = ea_new_catalog(&EXT_GROUP | &EXC_DEFAULT | &EXD_NONE)
# Create a new Group object and retrieve its data array.
my$group = ea_new_group($cat);
my$ary= $group->value();
# Push the new Items onto the Group array.
foreach my$v (@items) {
push(@$ary, ea_new_item(ea_new_catalog($v->[0]), $v->[1]));
使用libexacct 的Perl 接口
第5 章• 管理扩展记帐(任务) 69
}
# Open the exacct file, write the record & close.
my$f = ea_new_file(’/tmp/exacct’, &O_RDWR | &O_CREAT | &O_TRUNC)
|| die("create /tmp/exacct failed: ", ea_error_str(), "\n");
$f->write($group);
$f = undef;
如何列显exacct 文件的内容
使用以下Perl 脚本可以列显exacct 文件的内容。
#!/usr/perl5/5.6.1/bin/perl
use strict;
use warnings;
use Sun::Solaris::Exacct qw(:EXACCT_ALL);
die("Usage is dumpexacct \n") unless (@ARGV == 1);
# Open the exact file and displaythe header information.
my$ef = ea_new_file($ARGV[0], &O_RDONLY) || die(error_str());
printf("Creator: %s\n", $ef->creator());
printf("Hostname: %s\n\n", $ef->hostname());
# Dump the file contents
while (my$obj = $ef->get()) {
使用libexacct 的Perl 接口
70 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
ea_dump_object($obj);
}
# Report anyerrors
if (ea_error() != EXR_OK && ea_error() != EXR_EOF) {
printf("\nERROR: %s\n", ea_error_str());
exit(1);
}
exit(0);
Sun::Solaris::Exacct::Object->dump() 的输出示

以下是针对第68 页中的“如何创建新的组记录并将其写入文件”中创建的文件运行
Sun::Solaris::Exacct::Object->dump() 时生成的输出示例。
Creator: root
Hostname: localhost
GROUP
Catalog = EXT_GROUP|EXC_DEFAULT|EXD_NONE
ITEM
Catalog = EXT_STRING|EXC_DEFAULT|EXD_CREATOR
Value = me
ITEM
Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_PID
Value = 845523
ITEM
使用libexacct 的Perl 接口
第5 章• 管理扩展记帐(任务) 71
Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_UID
Value = 37845
ITEM
Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_GID
Value = 10
ITEM
Catalog = EXT_STRING|EXC_DEFAULT|EXD_PROC_COMMAND
Value = /bin/rec
ENDGROUP
使用libexacct 的Perl 接口
72 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
资源控制(概述)
按照第4 章中所述确定系统上工作负荷的资源消耗情况之后,便可对资源的使用情况设定
限制。这些限制可防止工作负荷过度消耗资源。资源控制功能是用于此用途的约束机制。
本章包含以下主题:
 第74 页中的“资源控制概念”
 第75 页中的“配置资源控制和属性”
 第83 页中的“应用资源控制”
 第83 页中的“在正在运行的系统上临时更新资源控制值”
 第84 页中的“用于资源控制的命令”
有关如何管理资源控制的信息,请参见第7 章。
Solaris 10 在资源控制方面的新增功能
以下一组资源控制取代了System V 进程间通信(interprocess communication, 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
已添加了以下加密资源控制:
6第6 章
73
 project.max-crypto-memory
已添加了以下其他资源控制:
 project.max-lwps
 project.max-tasks
 project.max-contracts
有关更多信息,请参见第76 页中的“可用的资源控制”。
有关Solaris 10 新增功能的完整列表以及Solaris 发行版的描述,请参见《Solaris 10 What’s
New》。
资源控制概念
在Solaris 操作系统中,每个进程资源限制的概念已扩展到了第2 章中介绍的任务实体和项
目实体。这些增强功能由资源控制(resource control, rctl) 功能提供。此外,通过/etc/system
可调参数设置的分配现在可以自动配置,也可以借助资源控制机制来配置。
资源控制通过前缀project、task 或process 标识。可以查看系统范围的资源控制。可以在
正在运行的系统上更新资源控制值。
在运行区域的系统上,前缀zone 标识区域范围的资源控制。有关区域范围的可用资源控制
的信息,请参见第215 页中的“资源类型属性”。
有关此发行版中提供的标准资源控制的列表,请参见第76 页中的“可用的资源控制”。
资源限制和资源控制
UNIX 系统一直以来都提供资源限制功能(resource limit facility, rlimit)。使用rlimit 功能,管
理员可以对进程可占用的资源设置一个或多个数值限制。这些限制包括每个进程使用的
CPU 时间、每个进程的核心转储文件大小以及每个进程的最大堆大小。堆大小是指为进程
数据段分配的临时内存量。
资源控制功能为资源限制功能提供了兼容性界面。使用资源限制的现有应用程序将继续运
行,不会更改。这些应用程序的观察方法,与修改之后可利用资源控制功能的应用程序的
观察方法相同。
进程间通信和资源控制
进程可以使用几种进程间通信(interprocess communication, IPC) 之一进行相互通信。使用
IPC,可以在进程之间传输和同步信息。在Solaris 10 之前的发行版中,IPC 可调参数是通过
向/etc/system 文件中添加条目来设置的。现在,资源控制功能提供了可定义内核的IPC 功
能行为的资源控制。这些资源控制将替换/etc/system 可调参数。
资源控制概念
74 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
要查看哪些IPC 对象在使用项目资源,请使用带有-J 选项的ipcs 命令。要查看示例内容,
请参见第97 页中的“如何使用ipcs”。第97 页中的“如何使用ipcs”?£有关ipcs 命
令的更多信息,请参见ipcs(1)。
有关Solaris 系统调优的信息,请参见《Solaris Tunable Parameters Reference Manual》。
资源控制约束机制
资源控制提供了一种系统资源约束机制,可以防止进程、任务和项目占用指定的系统资源
量。此机制通过防止占用过多的资源,可使系统更易于管理。
约束机制可用于支持容量规划过程。有一种偶尔会用到的约束,它可以提供有关应用程序
资源需求的信息,而不必拒绝为应用程序分配的资源。
项目属性机制
资源控制还可以作为资源管理功能的简单属性机制。例如,可用于公平共享调度程序(fair
share scheduler, FSS) 调度类中项目的CPU 份额数由project.cpu-shares 资源控制定义。由
于此控制为项目指定了固定的份额数,因此,与超过控制有关的各项操作不相关联。在此
上下文中,将project.cpu-shares 控制的当前值视为指定项目的属性。
另一类型的项目属性用于控制附加到项目的进程集合对物理内存资源的消耗。这些属性具
有前缀rcap,例如rcap.max-rss。与资源控制类似,此类型的属性也在project 数据库中配
置。但是,资源控制由内核同步执行,而资源上限则由资源上限执行守护进程rcapd 在用户
级别上异步执行。有关rcapd 的信息,请参见第10 章和rcapd(1M)。
project.pool 属性用于指定项目的池绑定。有关资源池的更多信息,请参见第12 章。
配置资源控制和属性
资源控制功能通过project 数据库配置。请参见第2 章。资源控制和其他属性在project 数
据库条目的最终字段中设置。与每个资源控制关联的值都括在括号中,并显示为用逗号分
隔的纯文本。括号中的值构成一条“操作子句”。每条操作子句都包含一个权限级别、一
个阈值以及一个与特定阈值关联的操作。每个资源控制可以有多条操作子句,这些子句也
用逗号分隔。以下条目定义了项目实体的按任务轻量进程限制和按进程最多CPU 时间限
制。当进程运行1 小时之后,process.max-cpu-time 将会向此进程发送SIGTERM;如果此
进程持续运行的总时间达到1 小时1 分钟,则会向此进程发送SIGKILL。请参见表6–2。
development:101:Developers:::task.max-lwps=(privileged,10,deny);
process.max-cpu-time=(basic,3600,signal=TERM),(priv,3660,signal=KILL)
typed as one line

 

 

以上文章转自于 : http://developers.sun.com.cn/

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