谁有Re:从零开始的从零开始异世界生活2第七话17:07秒—18:45秒出现的纯音乐完整版资源,在线等

:Re:从零开始的异世界生活TV版201626集全 别名:Re:ゼロから始める異世界生活/从零开始的异世界生活/Re:Life in a different world from zero上映:优酷开播:评分: 9.2适用年龄:16岁以上导演:地区:类型://总播放数:74,361,449评论:65,408顶:153,333声优:////简介:在异世界陷入迷茫的普通高中生菜月昴,邂逅了一位银发的美少女。昴想助她一臂之力,却一次次地遭遇背叛、暴力,甚至是死亡。
&死亡重置&——无力的少年拥有的唯一能力,能将死后时间倒转回开始。使用了这般力量,便会失去过去的回忆,可为了守护最重要的人们,昴必须抗争到底。简介:在异世界陷入迷茫的普通高中生菜月昴,邂逅了一位银发的美少女。昴想助她一臂之力,却一次次地遭遇背叛、暴力,甚至是死亡。
&死亡重置&——无力的少年拥有的唯一能力,能将死后时间倒转回开始。使用了这般力量,便会失去过去的回忆,可为了守护最重要的人们,昴必须抗争到底。分享给朋友:通用代码: <input type="text" class="s-input" id="link2" value="" />复 制html代码: 复 制flash地址: <input type="text" class="s-input" id="link4" value="" />复 制下载至电脑扫码用手机看用或微信扫码在手机上继续观看二维码2小时内有效扫码用手机继续看用或微信扫码在手机上继续观看二维码2小时内有效,扫码后可分享给好友没有优酷APP?立即下载请根据您的设备选择下载版本 药品服务许可证(京)-经营-违法不良信息举报: 电话、邮箱youkujubao@service.alibaba.com请使用者仔细阅读优酷、、、、和Copyright(C)2018 优酷 youku.com 版权所有与大家分享一首非常好听的纯音乐_新CG儿 - 数字视觉分享平台 | AE模板_视频素材_免费下载
与大家分享一首非常好听的纯音乐
发表时间: 11:19
一首非常好听的纯音乐,见论坛没有人上传,特意传上来与大家分享只希望觉得好听的朋友,听完之后给我留个脚印!我会继续分享给大家更多好听的纯音乐【文件描述】音乐原名为《With&An&Orchid》。内含1个mp3格式的音频文件【素材格式】MP3【音频位速】192kbps【时间长度】5分07秒【文件大小】6.99M【在线试听】
此资源使用专线下载通道需 2 个像素。您可以选择 。
CGer们的评论
Copyright (C) 2010 www.NewCGer.com 沪ICP备号
您已购买本资源请点“确认”下载RE:从零开始的异世界生活08__23-32-07.mobi-百度云搜索-云盘资源
<meta name="description" content="RE:从零开始的异世界生活08__23-32-07是百度云用户分享的网盘资源,在百度网盘、百度云盘可以收藏,分享和下载">
特多盘资源&pan66.com&&&我们只提供百度网盘资源搜索,抓取百度网盘的链接而不保存任何实质资源,仅供学习交流。
当前位置:>>>RE:从零开始的异世界生活08__23-32-07.mobi
RE:从零开始的异世界生活08__23-32-07.mobi
资源分类:
资源类型:百度云
浏览次数:2355次
下载次数:245
分享用户:
文件大小:3.6M
发布日期: 13:42
资源类别:
收藏分享:
他还分享了其他资源
该栏目下其他资源
你可能还喜欢
其它排行榜
特多盘资源(www.pan66.com) All Rights Reserved广告合作关于本站
免责声明:本站仅提供百度网盘资源搜索服务,不存放任何实质内容。如有侵权内容请联系百度云盘,百度数据源资源删除后本站的链接将自动失效。第 1 部分 资源管理 (系统管理指南:Oracle Solaris Containers-资源管理和 Oracle Solaris Zones)
&& 第 1 部分 资源管理系统管理指南:Oracle Solaris Containers-资源管理和 Oracle Solaris Zones第&1&部分 资源管理
此部分介绍 Solaris 10 资源管理,您可以使用此软件控制应用程序使用可用系统资源的方式。
Solaris 10 资源管理介绍
资源管理功能是 Solaris Container 环境的一个组件。使用资源管理,您可以控制应用程序如何使用可用系统资源。其中包括:
分配计算资源,例如处理器时间
监视已分配资源使用情况,然后根据需要调整分配
生成用于分析、计费和容量规划的扩展记帐信息
本章包含以下主题:
资源管理概述
现代计算环境必须针对系统上不同应用程序产生的不同的工作负荷做出灵活的响应。工作负荷是一个或一组应用程序的所有进程的集合。如果没有使用资源管理功能,Solaris 操作系统通过动态适应新的应用程序请求来对工作负荷需求做出响应。该缺省响应通常表示系统上的所有活动都对资源具有同等的访问权。使用 Solaris 资源管理功能,您可以分别对待各个工作负荷。其中包括:
限制访问特定资源
按优先级别为工作负荷提供资源
将工作负荷彼此隔离
最大限度地减少工作负荷之间的性能影响以及监视资源使用情况和利用率的功能,称为资源管理。资源管理通过一组算法来实现。算法处理应用程序在执行过程中提出的一系列功能请求。
使用资源管理功能,您可以针对不同的工作负荷修改操作系统的缺省行为。行为主要是指应用程序向操作系统提出一个或多个资源请求时操作系统算法所做出的一组决定。可以使用资源管理功能进行以下操作:
拒绝应用程序使用资源或使一个应用程序优先于其他应用程序使用超过其他方式允许的资源分配量
集中处理特定的分配(而不使用隔离机制)
实现使用资源管理功能的系统配置的目的有若干种。其中包括:
防止应用程序毫无限制地占用资源
基于外部事件更改应用程序的优先级
根据系统利用率最大化的目标,平衡一组应用程序的资源保证
在规划资源管理配置时,主要要求如下:
识别系统上争用资源的工作负荷
将不产生冲突的工作负荷与那些性能请求会影响主工作负荷的工作负荷区分开来
识别合作的工作负荷和冲突的工作负荷后,可以在系统功能允许的范围内,创建对业务服务目标影响最小的资源配置。
通过提供控制机制、通知机制和监视机制,可在 Solaris 系统中实现有效资源管理。上述许多功能都是通过增强现有机制来提供的,例如
文件系统、处理器集和调度类。而其他功能是资源管理所特有的。这些功能将在后续章节中介绍。
资源是可进行处理以更改应用程序行为的计算系统的任何方面。因此,资源就是应用程序隐式或显式请求的功能。如果拒绝或约束了此类功能,则强大的应用程序在执行时会慢很多。
相对于资源标识,可以按多种标准对资源进行分类。这些标准可以是隐式请求相对于显式请求,基于时间(例如 CPU 时间)相对于与时间无关(例如指定的 CPU 份额等)。
一般情况下,基于调度器的资源管理应用于应用程序可隐式请求的资源。例如,要继续执行,应用程序会隐式请求更多 CPU 时间。要将数据写入网络套接字,应用程序会隐式请求带宽。可针对隐式请求的资源的总使用量设置约束。
也可提供其他接口,以便显式协商带宽或 CPU 服务级别。明确请求的资源(例如请求附加线程)可以通过约束进行管理。
资源管理控制机制
Solaris 操作系统可用的三种控制机制为约束、调度和分区。
使用约束,管理员或应用程序开发者可以对工作负荷所占用的特定资源设置限定。限制已知时,建立资源占用方案模型变得简单得多。也可使用限定控制不良应用程序,否则它们会通过发出无法控制的资源请求影响系统的性能或可用性。
约束确实给应用程序带来了复杂因素。它有可能会修改应用程序和系统之间的关系,导致应用程序无法再正常工作。降低这种风险的一种途径是用未知的资源行为逐渐减少对应用程序的约束。中介绍的资源控制功能提供了一种约束机制。可通过编写新的应用程序来了解其资源约束,但是并不是所有应用程序编写者都选择这样做。
调度是指按特定间隔做出一系列分配决定。所做的决定基于可预测的算法。不需要当前分配的应用程序会将资源留给其他应用程序使用。基于调度的资源管理可确保在配置的资源充裕时全部进行利用,在配置的资源处于临界或过量使用状态时提供控制分配。基础算法定义了如何解释术语&控制&。在某些情况下,调度算法可能会保证所有应用程序都对资源具有一定的访问权限。中介绍的公平份额调度器 (fair share scheduler, FSS) 能够以可控的方法管理应用程序对 CPU 资源的访问权限。
分区用于将工作负荷绑定到系统可用资源的子集。该绑定保证工作负荷总是能够使用一定量的资源。使用中介绍的资源池功能,您可以将工作负荷限定为使用计算机的特定资源部分。
使用分区的配置可避免整个系统的资源缺乏。但是,避免资源缺乏的同时,也降低了实现高利用率的能力。对于保留的资源组(例如处理器),即使其绑定的工作负荷处于闲置状态,也不能由其他工作负荷使用。
资源管理配置
部分资源管理配置可能位于网络名称服务中。该功能允许管理员在一组计算机集合中应用资源管理约束,而不是专门基于单个计算机应用。相关工作可共享一个通用标识符,可以通过记帐数据将此工作的总使用量制成表格。
中更加全面地介绍了资源管理配置和面向工作负荷的标识符。中介绍了将这些标识符与应用程序资源使用相链接的扩展记帐功能。
与 Solaris Zones 交互
资源管理功能可与 Solaris Zones 结合使用来进一步完善应用程序环境。将在本指南的适当章节中介绍这些功能与 Solaris Zones 之间的交互。
何时使用资源管理
使用资源管理可以确保应用程序获得所需的响应时间。
资源管理也可增加资源利用率。通过对使用权分类和划分优先级,可在非高峰期有效使用保留资源,这样通常可避免对额外处理能力的需求。您还可以确保资源不会因负荷的改变而浪费。
服务器整合
资源管理非常适合于在单个服务器上整合多个应用程序的环境。
管理大量计算机所带来的成本和复杂性促使在更大、更具伸缩性的服务器上整合多个应用程序。您可以使用资源管理软件在一个系统上分别运行多个工作负荷,而不是通过对单独系统资源的完全访问权限,在每个单独的系统上运行一个工作负荷。使用资源管理,您可以通过在单个 Solaris 系统上运行和控制多个不同应用程序来降低总体拥有成本。
如果您提供 Internet 和应用程序服务,则可以使用资源管理来执行以下操作:
在单个计算机上驻留多个 Web 服务器。您可以控制每个 Web 站点的资源占用,并防止每个站点受到其他站点的可能侵入。
防止错误的公共网关接口 (common gateway interface, CGI) 脚本占用全部 CPU 资源。
阻止行为不良的应用程序泄漏所有可用虚拟内存。
确保用户的应用程序不受同一站点上运行的其他用户应用程序的影响。
在同一计算机上提供不同级别或类别的服务。
获取用于计费的记帐信息。
支持大规模或变动的用户群体
可以在任何拥有大规模、多样化用户基础的系统(例如教育机构)中使用资源管理功能。如果您有多个工作负荷,则可以将软件配置为赋予特定项目优先权。
例如,在大型的经纪公司里,贸易商需要不时地通过快速访问来执行查询或计算。而其他系统用户的工作负荷相对稳定。如果为贸易商的项目分配了较大比例的处理能力,则贸易商就可获得所需的响应能力。
资源管理也非常适用于支持瘦客户机系统。这些平台为无态控制台提供了帧缓冲区和输入设备,例如智能卡。实际的计算在共享服务器上完成,形成了分时型环境。使用资源管理功能可以隔离服务器上的用户。这样,导致过载的用户就不会独占硬件资源并明显影响使用该系统的其他用户。
建立资源管理(任务图)
以下任务图高度概括了在您的系统上建立资源管理的步骤。
识别系统上的工作负荷并按项目对每个工作负荷进行分类。&
在 /etc/project 文件、NIS 映射或 LDAP 目录服务中创建项目条目。
设置系统上工作负荷的优先级。&
确定哪些是关键的应用程序。这些工作负荷可能需要对资源的优先访问权。&
请参考您的业务服务目标。&
监视系统上的实时活动。&
使用性能工具查看系统上正在运行的工作负荷的当前资源占用。然后评估是否必须限制对给定资源的访问或将特定工作负荷与其他工作负荷隔离开来。&
和 、、、、 和
对系统上正在运行的工作负荷进行临时修改。&
要确定可以更改哪些值,请参考 Solaris 系统中的可用资源控制。当任务或进程正在运行时,可从命令行更新值。&
在 project 数据库或命名服务项目数据库中为每个项目条目设置资源控制和项目属性。
/etc/project 文件或命名服务项目数据库中的每个项目条目都可包含一个或多个资源控制或属性。资源控制会约束附加到该项目上的任务和进程。对于为资源控制设置的每个阈值,您都可以关联一个或多个在达到该阈值时采取的操作。
您可以使用命令行界面来设置资源控制,也可以使用 Solaris Management Console 设置某些配置参数。&
为项目附加的进程集所占用的物理内存资源设置上限。&
资源上限执行守护进程将执行在 /etc/project 文件中为项目的 rcap.max-rss 属性定义的物理内存资源上限。
创建资源池配置。&
资源池提供了一种对系统资源(例如处理器)进行分区的途径,并在多次重新引导期间维护这些分区。可以在 /etc/project 文件中为每个条目添加一个 project.pool 属性。
将公平份额调度器 (fair share scheduler, FSS) 设置为缺省的系统调度器。&
确保所有用户进程位于一个单独的 CPU 系统中,或者位于属于同一调度类的处理器集中。&
激活扩展记帐功能来监视并记录任务或进程的资源占用情况。&
使用扩展记帐数据可以评估当前资源控制并为将来的工作负荷规划容量要求。可以跟踪整个系统的总使用量。要获取多个系统中相关工作负荷的全部使用情况统计信息,可在多台计算机间共享项目名称。&
(可选)如果需要对配置做其他调整,可继续从命令行更改值。您可以在任务或进程正在运行时更改值。&
对现有任务所做的修改可以立即生效,无需重新启动项目。调节值,直至您对性能满意。然后,更新 /etc/project 文件或命名服务项目数据库中的当前值。
(可选)捕获扩展记帐数据。&
针对活动的进程和任务编写扩展记帐记录。生成的文件可用于规划、分摊费用和计费。还可以使用 libexacct 的实用摘录和报告语言 (Practical Extraction and Report Language, Perl) 接口,来开发自定义报告和摘录脚本。
项目和任务(概述)
本章讨论 Solaris 资源管理的项目和任务功能。项目和任务用于标记工作负荷并将它们彼此分离。
本章包含以下主题:
要使用项目和任务功能,请参见。
Solaris 10 在项目数据库和资源控制命令方面的新增功能
Solaris 10 增强功能包括:
针对资源控制值和命令扩展了对值和单元修饰符的支持
对项目属性字段进行验证和处理更加简便
修改了 prctl 和 projects 命令的输出格式并引入了新选项
可通过 useradd 命令设置用户的缺省项目,并使用 usermod 和 passmgmt 命令修改信息
除了本章和中包含的信息外,还可以参见以下手册页:
Solaris 10 5/08 增强功能包括为 projmod 命令添加了 -A 选项。请参见。
有关 Solaris 10 新增功能的完整列表以及 Solaris 发行版的说明,请参见。
项目和任务功能
要优化工作负荷响应,必须首先能够识别要分析的系统上运行的工作负荷。此信息可能很难通过单独使用纯粹面向进程或面向用户的方法来获取。在 Solaris 系统中,您可以使用两个附加功能来分离和识别工作负荷: 项目和任务。项目为相关工作提供了网络范围内的管理标识符。任务将一组进程聚集成表示工作负荷组件的可管理实体。
在 project 名称服务数据库中指定的控制针对进程、任务和项目进行了设置。由于进程和任务控制通过 fork 和 settaskid 系统调用继承,因此,所有在项目内创建的进程和任务都可继承这些控制。有关这些系统调用的信息,请参见
根据其项目或任务的成员关系,可以使用标准 Solaris 命令处理正在运行的进程。扩展记帐功能可以报告进程和任务的使用情况,并使用管理项目标识符标记每个记录。通过此进程,可以将脱机工作负荷分析与联机监视相互关联。项目标识符可以通过 project 名称服务数据库在多台计算机之间共享。这样,在(或跨)多台计算机上运行的相关工作负荷的资源占用情况最终可以在所有计算机上分析出来。
项目标识符
项目标识符是指用于标识相关工作的管理标识符。可以将项目标识符视为等同于用户标识符和组标识符的工作负荷标记。一个用户或组可以属于一个或多个项目。这些项目可用于表示允许用户(或用户组)参与的工作负荷。此成员关系然后可以作为费用分摊(例如基于使用情况或初始资源分配等)的基础。尽管必须为用户指定一个缺省项目,但是用户启动的进程可以与用户参与的任何项目关联。
确定用户的缺省项目
要登录到系统,必须为用户指定一个缺省项目。即使用户不在缺省项目中指定的用户或组列表中,此用户仍会自动成为该项目的成员。
由于系统上的每个进程都具有项目成员资格,因此,必须使用一种算法为登录或其他初始进程指定缺省项目。此算法在 getprojent(3C) 手册页中进行了介绍。系统按照顺序步骤确定缺省项目。如果找不到缺省项目,则会拒绝用户的登录或启动进程的请求。
系统按顺序执行以下步骤,以确定用户的缺省项目:
如果用户具有在 /etc/user_attr 扩展用户属性数据库中定义了 project 属性的某个条目,则 project 属性的值即为缺省项目。请参见
如果 project 数据库中存在名为 user.user-id 的项目,则该项目即为缺省项目。有关更多信息,请参见
如果 project 数据库中存在名为 group. group-name 的项目,其中 group-name 是在 passwd 文件中指定的用户缺省组的名称,则该项目即为缺省项目。有关 passwd 文件的信息,请参见
如果 project 数据库中存在特殊的项目 default,则此项目即为缺省项目。
此逻辑由 getdefaultproj() 库函数提供。有关更多信息,请参见
使用 useradd、usermod 和 passmgmt 命令设置用户属性
您可以使用以下带有 -K 选项和 key=value 对的命令在本地文件中设置用户属性:
修改用户信息
设置用户的缺省项目
修改用户信息
本地文件可包括以下内容:
/etc/group
/etc/passwd
/etc/project
/etc/shadow
/etc/user_attr
如果正在使用某一网络命名服务(如 NIS)为本地文件补充其他条目,则这些命令不能更改该网络命名服务提供的信息。但是,这些命令确实可以根据外部命名服务数据库验证以下内容:
用户名(或角色)的唯一性
用户 ID 的唯一性
是否存在任何指定的组名
有关更多信息,请参见 、、 和
project 数据库
您可以将项目数据存储在本地文件、网络信息服务 (Network Information Service, NIS) 项目映射或轻量目录访问协议 (Lightweight Directory Access Protocol, LDAP) 目录服务中。/etc/project 文件或命名服务在登录时使用,由可插拔验证模块 (pluggable authentication module, PAM) 发出的所有帐户管理请求使用它将用户绑定到缺省项目。
注 & 对项目数据库中条目的更新,无论是对 /etc/project 文件还是对网络命名服务中数据库表示形式的更新,都不会应用于当前活动的项目。使用 login 或 newtask 命令时,会将更新应用于加入项目的新任务。有关更多信息,请参见
PAM 子系统
更改或设置身份的操作包括登录到系统、调用 rcp 或 rsh 命令,以及使用 ftp 或使用 su。当操作涉及更改或设置身份时,会使用一组可配置的模块来提供验证、帐户管理、证书管理和会话管理。
项目的帐户管理 PAM 模块在
手册页中进行介绍。有关 PAM 的概述,请参见。
命名服务配置
资源管理支持命名服务 project 数据库。/etc/nsswitch.conf 文件中定义了 project 数据库的存储位置。缺省情况下,会先列出 files,但是源可以按任意顺序列出。
project: files [nis] [ldap]
如果列出了多个项目信息源,则 nsswitch.conf 文件会指示例程开始在列出的第一个源中搜索信息,然后搜索后续源。
有关 /etc/nsswitch.conf 文件的更多信息,请参见和 。
本地 /etc/project 文件格式
如果在 nsswitch.conf 文件中选择 files 作为 project 数据库源,则登录进程会在 /etc/project 文件中搜索项目信息。有关更多信息,请参见
对于系统识别的每个项目,project 文件均包含以下形式的单行条目:
projname:projid:comment:user-list:group-list:attributes
字段定义如下:
项目的名称。该名称必须是由字母数字字符、下划线 (_) 字符、连字符 (-) 和句点 (.) 组成的字符串。句点是为对操作系统有特殊意义的项目保留的,只能将其用在用户的缺省项目名称中。projname 不能包含冒号 (: ) 或换行符。
系统内项目的唯一数字 ID (PROJID)。projid 字段的最大值为 UID_MAX ()。
项目的说明。
允许参与项目的用户的列表(以逗号分隔)。
此字段中可以使用通配符。星号 (*) 允许所有用户参与项目。感叹号后跟星号 (!*) 可将所有用户排除在项目之外。感叹号 (!)后跟用户名可将指定用户排除在项目之外。
group-list
允许参与项目的用户组的列表(以逗号分隔)。
此字段中可以使用通配符。星号 (*) 允许所有组参与项目。感叹号后跟星号 (!*) 可将所有组排除在项目之外。感叹号 (!)后跟组名可将指定组排除在项目之外。
attributes
用分号分隔的名称-值对列表,如资源控制(请参见)。name 是指定与对象相关的属性的任意字符串,value 是该属性的可选值。
name[=value]
在名称-值对中,名称仅可包含字母、数字、下划线和句点。句点通常用作资源控制 (rctl) 的类别和子类别之间的分隔符。属性名称的第一个字符必须是字母。名称区分大小写。
可以在值中使用逗号和括号结构以便确立优先级。
分号用于分隔名称-值对。不能在值定义中使用分号。冒号用于分隔项目字段。不能在值定义中使用冒号。
注 & 如果读取此文件的例程遇到格式错误的条目,则这些例程会停止。不会分配错误条目后指定的任何项目。
以下示例显示了缺省的 /etc/project 文件:
system:0:System:::
user.root:1:Super-User:::
noproject:2:No Project:::
default:3::::
group.staff:10::::
以下示例显示了在结尾添加了项目条目的缺省的 /etc/project 文件:
system:0:System:::
user.root:1:Super-User:::
noproject:2:No Project:::
default:3::::
group.staff:10::::
user.ml:2424:Lyle Personal:::
booksite:4113:Book Auction Project:ml,mp,jtd,kjh::
您还可以将资源控制和属性添加到 /etc/project 文件:
要为项目添加资源控制,请参见。
中所述的资源上限设置守护进程为项目定义物理内存资源上限,请参见。
要将 project.pool 属性添加到项目条目,请参见。
NIS 的项目配置
如果正在使用 NIS,则可以在 /etc/nsswitch.conf 文件中进行指定,以便在 NIS 项目映射中搜索项目:
project: nis files
NIS 映射(project.byname 或 project.bynumber)与 /etc/project 文件具有相同的形式:
projname:projid:comment:user-list:group-list:attributes
有关更多信息,请参见。
LDAP 的项目配置
如果正在使用 LDAP,则可以在 /etc/nsswitch.conf 文件中进行指定,以便在 LDAP project 数据库中搜索项目:
project: ldap files
有关 LDAP 的更多信息,请参见。有关 LDAP 数据库中项目条目结构的更多信息,请参见。
任务标识符
每次成功登录到项目时,都会创建一个包含登录进程的新任务。任务是指表示一段时间内一组工作的进程集。任务也可以视为工作负荷组件。会为每个任务自动指定一个任务 ID。
每个进程都是一个任务的成员,而每个任务都与一个项目关联。
项目和任务树任务还支持对进程组执行的所有操作,如信号传送。您还可以将任务绑定到处理器集,并为任务设置调度优先级和类,优先级和类会修改任务中的所有当前进程以及后续进程。
每次加入项目时,就会创建任务。以下操作、命令和函数可创建任务:
setproject
您可以使用以下方法之一创建最终任务。所有进一步创建新任务的尝试都将失败。
可以使用带有 -F 选项的 newtask 命令。
可以在 project 命名服务数据库中为项目设置 task.final 属性。在此项目中,所有由 setproject 创建的任务都有 TASK_FINAL 标志。
有关更多信息,请参见 、、、 和
扩展记帐功能可以为进程提供记帐数据。此数据在任务级别聚合。
用于项目和任务的命令
下表中所示的命令提供了项目和任务功能的主要管理接口。
手册页参考&
显示用户的项目成员关系。列出 project 数据库中的项目。列显指定项目的信息。如果未提供项目名称,则显示所有项目的信息。使用带有 -l 选项的 projects 命令可列显详细输出。
执行用户的缺省 shell 或指定命令,将执行命令放在指定项目拥有的新任务中。newtask 还可以用于为正在运行的进程更改任务和项目绑定。与 -F 选项一起使用,以创建最终任务。
更新口令文件中的信息。与 -K key=value 选项一起使用,可在本地文件中添加或替换用户属性。
将新项目条目添加到 /etc/project 文件。projadd 命令仅在本地系统上创建项目条目。projadd 不能更改网络命名服务提供的信息。
可用于编辑除缺省文件 /etc/project 之外的项目文件。为 project 文件提供语法检查。验证和编辑项目属性。支持标度值。
在本地系统上修改项目信息。projmod 不能更改网络命名服务提供的信息。但是,此命令确实可以根据外部命名服务验证项目名称和项目 ID 的唯一性。
可用于编辑除缺省文件 /etc/project 之外的项目文件。为 project 文件提供语法检查。验证和编辑项目属性。可用于添加新属性,向属性添加值或者删除属性。支持标度值。
从 Solaris 10 5/08 发行版开始,可与 -A 选项一起使用,以便将在项目数据库中找到的资源控制值应用到活动项目。与 project 文件中定义的值不匹配的现有值(例如通过 prctl 命令手动设置的值)都会被删除。
从本地系统中删除项目。projdel 不能更改网络命名服务提供的信息。
向本地文件添加缺省项目定义。与 -K key=value 选项一起使用,可添加或替换用户属性。
删除本地文件中的用户帐户。&
修改系统上的用户登录信息。与 -K key=value 选项一起使用,可添加或替换用户属性。
管理项目和任务
本章介绍如何使用 Solaris 资源管理中的项目和任务功能。
本章包含以下主题:
有关项目和任务功能的概述,请参见。
注 & 如果在安装了区域的 Solaris 系统上使用这些功能,则当这些功能命令在非全局区域 (non-global zone) 中运行时,只有同一区域中的进程才能通过使用进程 ID 的系统调用界面进行查看。
管理项目和任务(任务图)
查看用于项目与任务的命令和选项的示例。&
显示任务和项目 ID,显示系统上当前所运行进程和项目的各种统计信息。&
定义项目。&
在 /etc/project 文件中添加项目条目并修改此条目的值。
删除项目。&
从 /etc/project 文件中删除项目条目。
验证 project 文件或项目数据库。
检查 /etc/project 文件的语法或根据外部命名服务验证项目名称和项目 ID 的唯一性。
获取项目成员身份信息。&
显示发出调用的进程的当前项目成员身份。&
创建新任务。&
使用 newtask 命令在特定项目中创建一项新任务。
将正在运行的进程与不同的任务和项目进行关联。&
将进程号与特定项目中的新任务 ID 进行关联。&
添加并使用项目属性。&
使用项目数据库管理命令添加、编辑、验证和删除项目属性。&
命令和命令选项示例
本节提供用于项目与任务的命令和选项的示例。
用于项目和任务的命令选项
使用带有 -o 选项的 ps 命令可显示任务和项目 ID。例如,要查看项目 ID,请键入以下内容:
# ps -o user,pid,uid,projid
使用带有 -p 选项的 id 命令可列显当前的项目 ID,以及用户和组 ID。如果提供了 user 操作数,则还会列显与该用户的正常登录相关联的项目:
uid=124(jtd) gid=10(staff) projid=4113(booksite)
pgrep 和 pkill 命令
要仅将进程与特定列表中的项目 ID 进行匹配,请使用带有 -J 选项的 pgrep 和 pkill 命令:
# pgrep -J projidlist
# pkill -J projidlist
要仅将进程与特定列表中的任务 ID 进行匹配,请使用带有 -T 选项的 pgrep 和 pkill 命令:
# pgrep -T taskidlist
# pkill -T taskidlist
prstat 命令
要显示系统上当前运行的进程和项目的各种统计信息,请使用带有 -J 选项的 prstat 命令:
% prstat -J
PID USERNAME
CPU PROCESS/NLWP
0:00.00 0.3% prstat/1
0:08.27 0.2% Xsun/1
0:08.26 0.1% adeptedit/1
0:00.00 0.0% mibiisa/11
0:00.00 0.0% csh/1
0:00.00 0.0% dtterm/1
0:00.36 0.0% automountd/5
0:00.29 0.0% dtmail/11
0:00.59 0.0% dtwm/8
704K sleep
0:01.16 0.0% in.routed/1
180 daemon
0:00.00 0.0% statd/4
0:00.00 0.0% ypbind/1
0:00.00 0.0% lockd/1
0:00.00 0.0% inetd/1
0:00.00 0.0% keyserv/4
RSS MEMORY
CPU PROJECT
0:11.45 0.4% booksite
0:10.46 0.2% system
Total: 87 processes, 205 lwps, load averages: 0.05, 0.02, 0.02
要显示系统上当前运行的进程和任务的各种统计信息,请使用带有 -T 选项的 prstat 命令:
% prstat -T
PID USERNAME
CPU PROCESS/NLWP
23023 root
0:03:18 0.6% Xsun/1
0:04:31 0.5% adeptedit/1
0:00:00 0.1% dtterm/1
0:00:18 0.0% .netscape.bin/1
0:00:27 0.0% dtwm/5
0:00:00 0.0% prstat/1
0:00:00 0.0% lpsched/1
0:00:00 0.0% lockd/2
0:03:10 0.0% automountd/3
0:00:00 0.0% ypbind/1
162 daemon
0:00:00 0.0% statd/2
0:00:00 0.0% inetd/1
0:00:00 0.0% keyserv/2
0:00:02 0.0% rpcbind/1
672K sleep
0:00:03 0.0% in.rdisc/1
RSS MEMORY
CPU PROJECT
0:05:54 0.6% group.staff
0:03:18 0.6% group.staff
0:00:31 0.0% group.staff
0:03:33 0.0% system
Total: 65 processes, 154 lwps, load averages: 0.04, 0.05, 0.06
-J 和 -T 选项不能一起使用。
将 cron 和 su 用于项目和任务
cron 命令将发出 settaskid,以确保每个 cron、at 和 batch 作业都是在单独的任务中执行,并对提交用户使用了适当的缺省项目。at 和 batch 命令也会捕获当前项目 ID,以确保在运行 at 作业时恢复项目 ID。
作为模拟登录的一部分,su 命令将通过创建新任务加入目标用户的缺省项目。
要使用 su 命令切换用户的缺省项目,请键入以下内容:
如何定义项目和查看当前项目
此示例说明如何使用 projadd 命令添加项目条目,以及如何使用 projmod 命令修改此条目。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
使用 projects -l 查看系统上缺省的 /etc/project 文件。
# projects -l
system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::system
projid : 0
comment: ""
groups : (none)
projid : 1
comment: ""
groups : (none)
projid : 2
comment: ""
groups : (none)
projid : 3
comment: ""
groups : (none)
group.staff
projid : 10
comment: ""
groups : (none)
添加名为 booksite 的项目。将该项目指定给名为 mark 的用户,同时指定项目 ID 号 4113。
# projadd -U mark -p 4113 booksite
再次查看 /etc/project 文件。
# projects -l
projid : 0
comment: ""
groups : (none)
projid : 1
comment: ""
groups : (none)
projid : 2
comment: ""
groups : (none)
projid : 3
comment: ""
groups : (none)
group.staff
projid : 10
comment: ""
groups : (none)
projid : 4113
comment: ""
groups : (none)
在注释字段中添加描述项目的注释。
# projmod -c `Book Auction Project' booksite
查看 /etc/project 文件中的更改。
# projects -l
projid : 0
comment: ""
groups : (none)
projid : 1
comment: ""
groups : (none)
projid : 2
comment: ""
groups : (none)
projid : 3
comment: ""
groups : (none)
group.staff
projid : 10
comment: ""
groups : (none)
projid : 4113
comment: "Book Auction Project"
groups : (none)
另请参见要将项目、任务和进程绑定到池,请参见。
如何从 /etc/project 文件中删除项目
此示例显示如何使用 projdel 命令删除项目。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
使用 projdel 命令删除 booksite 项目。
# projdel booksite
显示 /etc/project 文件。
# projects -l
projid : 0
comment: ""
groups : (none)
projid : 1
comment: ""
groups : (none)
projid : 2
comment: ""
groups : (none)
projid : 3
comment: ""
groups : (none)
group.staff
projid : 10
comment: ""
groups : (none)
以用户 mark 的身份登录并键入 projects 来查看指定给此用户的项目。
# su - mark
# projects
如何验证 /etc/project 文件的内容
如果没有给出编辑选项,projmod 命令便会验证 project 文件的内容。
要验证 NIS 映射,请以超级用户的身份登录,并键入以下内容:
# ypcat project | projmod -f &
ypcat project | projmod -f & 命令尚未实现。
要检查 /etc/project 文件的语法,请键入以下内容:
# projmod -n
如何获取项目成员身份信息
使用带有 -p 标志的 id 命令显示发出调用的进程的当前项目成员身份。
uid=100(mark) gid=1(other) projid=3(default)
如何创建新任务
以目标项目 booksite 的成员身份登录。
使用带有 -v(详细)选项的 newtask 命令在 booksite 项目中创建新任务,以获取系统任务 ID。
machine% newtask -v -p booksite
通过执行 newtask,可以在指定项目中创建新任务并将用户的缺省 shell 置于此任务中。
查看发出调用的进程的当前项目成员身份。
machine% id -p
uid=100(mark) gid=1(other) projid=4113(booksite)
现在该进程成为新项目的成员。
如何将正在运行的进程移至新任务
此示例显示如何将正在运行的进程与不同的任务和新项目进行关联。要执行此操作,您必须是超级用户,或者是进程属主并且是新项目的成员。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
如果您是进程属主或新项目成员,则可以跳过此步骤。
获取 book_catalog 进程的进程 ID。
# pgrep book_catalog
将进程 8100 与 booksite 项目中的新任务 ID 进行关联。
# newtask -v -p booksite -c 8100
-c 选项指定 newtask 作用于现有的命名进程。
确认任务到进程 ID 的映射。
# pgrep -T 17
编辑和验证项目属性
您可以使用 projadd 和 projmod 项目数据库管理命令来编辑项目属性。
-K 选项指定属性替换列表。属性由分号 (;) 进行分隔。如果将 -K 选项和 -a 选项一起使用,则会添加属性或属性值。如果将 -K 选项和 -r 选项一起使用,则会删除属性或属性值。如果将 -K 选项与 -s 选项一起使用,则会替换属性或属性值。
如何将属性和属性值添加到项目
可以使用带有 -a 和 -K 选项的 projmod 命令将值添加到项目属性中。如果属性不存在,则会创建一个。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
在项目 myproject 中添加无属性值的资源控制属性 task.max-lwps。加入项目的任务只有系统属性值。
# projmod -a -K task.max-lwps myproject
然后可以为 myproject 项目中的 task.max-lwps 添加值。此值包含权限级别、阈值以及与达到阈值关联的操作。
# projmod -a -K "task.max-lwps=(priv,100,deny)" myproject
由于资源控制属性可以具有多个值,因此可以使用同一个选项将其他值添加到现有的值列表中。
# projmod -a -K "task.max-lwps=(priv,1000,signal=KILL)" myproject
用逗号分隔多个值。现在 task.max-lwps 条目应为:
task.max-lwps=(priv,100,deny),(priv,1000,signal=KILL)
如何从项目中删除属性值
此过程假设具有以下值:
task.max-lwps=(priv,100,deny),(priv,1000,signal=KILL)
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
要删除 myproject 项目中 task.max-lwps 资源控制的属性值,请使用带有 -r 和 -K 选项的 projmod 命令。
# projmod -r -K "task.max-lwps=(priv,100,deny)" myproject
如果 task.max-lwps 具有多个值,例如:
task.max-lwps=(priv,100,deny),(priv,1000,signal=KILL)
则会删除第一个匹配的值。结果将为:
task.max-lwps=(priv,1000,signal=KILL)
如何从项目中删除资源控制属性
要删除 myproject 项目中的 task.max-lwps 资源控制属性,请使用带有 -r 和 -K 选项的 projmod 命令。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
从项目 myproject 中删除属性 task.max-lwps 及其所有值:
# projmod -r -K task.max-lwps myproject
如何替换项目的属性和属性值
要替换项目 myproject 中属性 task.max-lwps 的值,请使用带有 -s 和 -K 选项的 projmod 命令。如果属性不存在,则会创建一个。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
使用所示的新值替换当前的 task.max-lwps 值:
# projmod -s -K "task.max-lwps=(priv,100,none),(priv,120,deny)" myproject
task.max-lwps=(priv,100,none),(priv,120,deny)
如何删除资源控制属性的现有值
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
要从项目 myproject 中删除 task.max-lwps 的当前值,请键入:
# projmod -s -K task.max-lwps myproject
扩展记帐(概述)
通过使用中介绍的项目和任务功能对工作负荷进行标记和分隔,可以监视每个工作负荷的资源占用情况。您可以使用扩展记帐子系统捕获一组有关进程和任务的详细资源占用情况的统计信息。
本章包含以下主题:
要开始使用扩展记帐,请跳至。
Solaris 10 在扩展记帐方面的新增功能
现在可以生成进程记帐的 mstate 数据。请参见。
有关 Solaris 10 新增功能的完整列表以及 Solaris 发行版的说明,请参见。
扩展记帐介绍
扩展记帐子系统记录执行工作的项目的资源使用情况。您还可以将扩展记帐与中所介绍的 Internet 协议服务质量 (Internet Protocol Quality of Service, IPQoS) 流记帐模块结合使用,以捕获系统上的网络流信息。
在应用资源管理机制之前,必须首先能够识别各种工作负荷对系统的资源占用需求。Solaris 操作系统中的扩展记帐功能提供了一种灵活方法,可按任务或进程或者按 IPQoS flowacct 模块提供的选定器来记录系统和网络资源占用情况。有关更多信息,请参见 ipqos(7IPP)。
与可实时度量系统使用情况的联机监视工具不同,通过扩展记帐,可检查历史使用情况。然后,可以对将来工作负荷的容量要求进行评估。
有了扩展记帐数据,便可以开发或购买用于资源费用分摊、工作负荷监视或容量规划的软件。
扩展记帐的工作原理
Solaris 操作系统中的扩展记帐功能使用一种版本化的可扩展文件格式来包含记帐数据。使用附带的库 libexacct(请参见 )中提供的 API,可以访问或创建采用此数据格式的文件。然后,可以在启用了扩展记帐的任何平台上分析这些文件,并且可以使用其数据进行容量规划和费用分摊。
如果扩展记帐处于活动状态,则会收集可由 libexacct API 检查的统计信息。使用 libexacct 可以向前或向后检查 exacct 文件。API 支持由 libexacct 生成的第三方文件以及由内核创建的文件。使用 libexacct 的实用摘录和报告语言 (Practical Extraction and Report Language, Perl) 接口,可以开发自定义报告和摘录脚本。请参见。
例如,如果启用了扩展记帐,则任务会跟踪其成员进程的总体资源使用情况。任务完成时会编写任务记帐记录,还会编写有关正在运行的进程和任务的临时记录。有关任务的更多信息,请参见。
在激活了扩展记帐情况下的任务跟踪可扩展的格式
扩展记帐格式实际上比 SunOS 传统系统记帐软件格式(请参见)更具可扩展性。扩展记帐允许在不同发行版的系统中添加和删除记帐度量标准,即使在系统操作过程中也是如此。
注 & 系统上的扩展记帐软件和传统系统记帐软件可以同时处于活动状态。
exacct 记录和格式
用于创建 exacct 记录的例程具有两个用途。
允许创建第三方 exacct 文件。
允许使用 putacct 系统调用(请参见 )创建嵌入在内核记帐文件中的标记记录。
putacct 系统调用也可通过 Perl 接口使用。
此格式允许捕获不同形式的记帐记录,而不要求每次更改都是显式的版本更改。使用记帐数据且编写准确的应用程序必须忽略它们不了解的记录。
libexacct 库可转换和生成格式为 exacct 的文件。此库是 exacct 格式文件支持的唯一接口。
getacct、putacct 和
wracct 系统调用不适用于流。配置 IPQoS 流记帐之后,内核便会创建流记录并将其写入文件。
在安装了区域的 Solaris 系统上使用扩展记帐
当扩展记帐子系统在全局区域中运行时,它会收集和报告整个系统(包括非全局区域)的信息。全局管理员还可以确定每个区域的资源占用情况。有关更多信息,请参见。
扩展记帐配置
/etc/acctadm.conf 文件中包含当前的扩展记帐配置。此文件通过 acctadm
接口而不是用户进行编辑。
目录 /var/adm/exacct 是放置扩展记帐数据的标准位置。您可以使用 acctadm 命令为进程和任务记帐数据文件指定其他位置。有关更多信息,请参见 。
用于扩展记帐的命令
修改扩展记帐功能的各种属性,停止和启动扩展记帐,并用于针对进程、任务和流选择要跟踪的记帐属性。&
针对活动的进程和任务编写扩展记帐记录。&
显示以前调用的命令。lastcomm 既可以使用标准记帐进程数据,又可以使用扩展记帐进程数据。
有关与任务和项目相关联的命令的信息,请参见。有关 IPQoS 流记帐的信息,请参见 。
libexacct 的 Perl 接口
通过 Perl 接口可以创建 Perl 脚本,该脚本可读取由 exacct 框架生成的记帐文件。您还可以创建编写 exacct 文件的 Perl 脚本。
此接口与基础 C API 在功能上是等效的。如果可能,通过基础 C API 获取的数据将显示为 Perl 数据类型。使用此功能,可以更轻松地访问数据,并且无需进行缓冲区压缩和解压缩操作。此外,所有内存管理均由 Perl 库执行。
各种与项目、任务和 exacct 相关的功能可分为多个组。每个功能组都位于单独的 Perl 模块中。每个模块都以 Sun 标准的 Sun::Solaris:: Perl 软件包前缀开头。Perl exacct 库提供的所有类均位于 Sun::Solaris::Exacct 模块中。
库提供针对 exacct 格式文件、目录标记和 exacct 对象的操作。exacct 对象分为两种类型:
项,是指单一的数据值(标量)
组,是指项的列表
下表概述了每个模块。
模块(不应包含空格)&
Sun::Solaris::Project
此模块提供了访问项目操作函数 、、、、、、、、、、 和
Project(3PERL)
Sun::Solaris::Task
此模块提供了访问任务操作函数
Task(3PERL)
Sun::Solaris::Exacct
此模块是顶层 exacct 模块。此模块提供了访问与 exacct 相关的系统调用 、 和
的功能。此模块还提供了访问
的功能。此模块同时也提供了所有 exacct EO_*、EW_*、EXR_*、P_* 和 TASK_* 宏的常量。
Exacct(3PERL)
Sun::Solaris::Exacct:: Catalog
此模块提供了面向对象的方法,以访问 exacct 目录标记中的位字段。此模块还提供了访问 EXC_*、EXD_* 和 EXD_* 宏常量的权限。
Exacct::Catalog(3PERL)
Sun::Solaris::Exacct:: File
此模块提供了面向对象的方法,以访问 libexacct
记帐文件函数 、、、、、 和 。
Exacct::File(3PERL)
Sun::Solaris::Exacct:: Object
此模块提供了面向对象的方法,以访问单个 exacct 记帐文件对象。exacct 对象表示为被指定隶属于相应 Sun::Solaris::Exacct::Object 子类的不透明参考。此模块分为项和组两种对象类型。在此级别上提供了访问
函数的方法。
Exacct::Object(3PERL)
Sun::Solaris::Exacct:: Object::Item
此模块提供了面向对象的方法,以访问单个 exacct 记帐文件项。此类型的对象从 Sun::Solaris::Exacct::Object 中继承。
Exacct::Object::Item(3PERL)
Sun::Solaris::Exacct:: Object::Group
此模块提供了面向对象的方法,以访问单个 exacct 记帐文件组。此类型的对象从 Sun::Solaris::Exacct::Object 中继承。这些对象提供了对
函数的访问。组中包含的各项表示为 Perl 数组。
Exacct::Object::Group(3PERL)
Sun::Solaris::Kstat
此模块提供了 kstat 功能的与 Perl 关联的散列接口。/bin/kstat 提供了此模块的使用示例,此示例采用 Perl 编写。
Kstat(3PERL)
有关说明如何使用上表中介绍的模块的示例,请参见。
管理扩展记帐(任务)
本章介绍如何管理扩展记帐子系统。
有关扩展记帐子系统的概述,请参见。
管理扩展记帐功能(任务图)
激活扩展记帐功能。&
使用扩展记帐监视系统上运行的每个项目的资源消耗情况。可以使用扩展记帐子系统捕获任务、进程和流的历史数据。
显示扩展记帐状态。&
确定扩展记帐功能的状态。&
查看可用的记帐资源。&
查看系统上的可用记帐资源。&
取消激活进程、任务和流的记帐功能。&
禁用扩展记帐功能。&
将 Perl 接口用于扩展记帐功能。&
使用 Perl 接口开发自定义报告脚本和提取脚本。&
使用扩展记帐功能
如果用户拥有要管理的扩展记帐类型的相应权限配置文件,则可以管理扩展记帐(启动记帐、停止记帐和更改记帐配置参数):
如何激活进程、任务和流的扩展记帐
要激活任务、进程和流的扩展记帐功能,请使用 acctadm 命令。acctadm 的可选最终参数表示此命令是应该针对扩展记帐功能的进程记帐组件、系统任务记帐组件还是流记帐组件执行。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
激活进程的扩展记帐。
# acctadm -e extended -f /var/adm/exacct/proc process
激活任务的扩展记帐。
# acctadm -e extended,mstate -f /var/adm/exacct/task task
激活流的扩展记帐。
# acctadm -e extended -f /var/adm/exacct/flow flow
另请参见有关更多信息,请参见 。
如何使用启动脚本激活扩展记帐
通过将 /etc/init.d/acctadm 脚本链接到 /etc/rc2.d,可以在运行时激活扩展记帐。
# ln -s /etc/init.d/acctadm /etc/rc2.d/Snacctadm
# ln -s /etc/init.d/acctadm /etc/rc2.d/Knacctadm
将 n 变量以数字替换。
必须至少手动激活一次扩展记帐以设置配置。
有关记帐配置的信息,请参见。
如何显示扩展记帐状态
键入不带参数的 acctadm 可以显示扩展记帐功能的当前状态。
Task accounting: active
Task accounting file: /var/adm/exacct/task
Tracked task resources: extended
Untracked task resources: none
Process accounting: active
Process accounting file: /var/adm/exacct/proc
Tracked process resources: extended
Untracked process resources: host
Flow accounting: active
Flow accounting file: /var/adm/exacct/flow
Tracked flow resources: extended
Untracked flow resources: none
在前一示例中,系统任务记帐在扩展模式和 mstate 模式下激活。进程记帐和流记帐在扩展模式下激活。
注 & 在扩展记帐的上下文中,微状态 (mstate) 是指与微状态进程转换关联的扩展数据,可从进程使用情况文件(请参见 )中获取此数据。与基本记录或扩展记录相比,此数据可提供有关进程活动的更多详细信息。
如何查看可用的记帐资源
可用的资源随系统和平台的不同而有所不同。使用带有 -r 选项的 acctadm 命令可以查看系统上的可用记帐资源组。
# acctadm -r
extended pid,uid,gid,cpu,time,command,tty,projid,taskid,ancpid,wait-status,zone,flag,
memory,mstatedisplays as one line
pid,uid,gid,cpu,time,command,tty,flag
extended taskid,projid,cpu,time,host,mstate,anctaskid,zone
taskid,projid,cpu,time
saddr,daddr,sport,dport,proto,dsfield,nbytes,npkts,action,ctime,lseen,projid,uid
saddr,daddr,sport,dport,proto,nbytes,npkts,action
如何取消激活进程记帐、任务记帐和流记帐
要取消激活进程记帐、任务记帐和流记帐,请使用带有 -x 选项的 acctadm 命令分别禁用每个记帐。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
禁用进程记帐。
# acctadm -x process
禁用任务记帐。
# acctadm -x task
禁用流记帐。
# acctadm -x flow
检验是否已禁用任务记帐、进程记帐和流记帐。
Task accounting: inactive
Task accounting file: none
Tracked task resources: extended
Untracked task resources: none
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 = '
# Retrieve the catalog tag.
Because we are
# doing this in an array context, the
# catalog tag will be returned as a (type, catalog, id)
# triplet, where each member of the triplet will behave as
# an integer or a string, depending on context.
# If instead this next line provided a scalar context, e.g.
= $obj-&catalog()-&value();
# then $cat would be set to the integer value of the
# catalog tag.
my @cat = $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++;
# 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 by examining 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);
# Otherwise it is just a 'plain' value, so
# display it.
printf("%s
Value = %s\n", $istr, $val);
# Otherwise we know we are dealing with a group.
# represent contents as a perl list or array (depending on
# context), so we can process the contents of the group
# 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 modify the contents of the group we could
# do so like this:
my $grp = $obj-&value();
# Returns an array reference
$grp-&[0] = $
# but accessing the group elements this way is much slower.
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 的文件。
#!/usr/bin/perl
use Sun::Solaris::Exacct qw(:EXACCT_ALL);
# Prototype list of catalog tags and values.
my @items = (
[ &EXT_STRING | &EXC_DEFAULT | &EXD_CREATOR
[ &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]));
# 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);
如何列显 exacct 文件的内容
使用以下 Perl 脚本可以列显 exacct 文件的内容。
#!/usr/bin/perl
use Sun::Solaris::Exacct qw(:EXACCT_ALL);
die("Usage is dumpexacct &exacct file&\n") unless (@ARGV == 1);
# Open the exact file and display the 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()) {
ea_dump_object($obj);
# Report any errors
if (ea_error() != EXR_OK && ea_error() != EXR_EOF)
printf("\nERROR: %s\n", ea_error_str());
Sun::Solaris::Exacct::Object-&dump() 的输出示例
以下是对在中创建的文件运行 Sun::Solaris::Exacct::Object-&dump() 时生成的输出示例。
Hostname: localhost
Catalog = EXT_GROUP|EXC_DEFAULT|EXD_NONE
Catalog = EXT_STRING|EXC_DEFAULT|EXD_CREATOR
Value = me
Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_PID
Value = 845523
Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_UID
Value = 37845
Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_GID
Value = 10
Catalog = EXT_STRING|EXC_DEFAULT|EXD_PROC_COMMAND
Value = /bin/rec
资源控制(概述)
按照中所述确定系统上工作负荷的资源消耗情况之后,便可对资源的使用情况设定限制。这些限制可防止工作负荷过度消耗资源。资源控制功能是用于此用途的约束机制。
本章包含以下主题:
有关如何管理资源控制的信息,请参见。
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
已添加了以下加密资源控制:
project.max-crypto-memory
已添加了以下其他资源控制:
project.max-lwps
project.max-tasks
project.max-contracts
有关更多信息,请参见。
有关 Solaris 10 新增功能的完整列表以及 Solaris 发行版的说明,请参见。
资源控制概念
在 Solaris 操作系统中,每进程资源限制的概念已扩展到中所述的任务和项目实体。这些增强功能由资源控制 (resource control, rctl) 功能提供。此外,通过 /etc/system 可调参数设置的分配现在可以自动配置,也可以借助资源控制机制来配置。
资源控制由前缀 zone、project、task 或 process 标识。可以查看系统范围的资源控制。可以在正在运行的系统上更新资源控制值。
有关此发行版中提供的标准资源控制的列表,请参见。有关可用的区域范围的资源控制的信息,请参见。
有关此发行版中提供的标准资源控制的列表,请参见。
资源限制和资源控制
UNIX 系统一直以来都提供资源限制功能 (rlimit)。使用 rlimit 功能,管理员可以对进程可占用的资源设置一个或多个数值限制。这些限制包括每个进程使用的 CPU 时间、每个进程的核心转储文件大小以及每个进程的最大堆大小。堆大小是指为进程数据段分配的临时内存量。
资源控制功能提供了用于资源限制功能的兼容性接口。使用资源限制的现有应用程序将继续运行,不会更改。这些应用程序的观察方法,与修改之后可利用资源控制功能的应用程序的观察方法相同。
进程间通信和资源控制
使用几种进程间通信 (interprocess communication, IPC) 之一,进程可以相互通信。使用 IPC,可以在进程之间传输和同步信息。在 Solaris 10 之前的发行版中,IPC 可调参数是通过向 /etc/system 文件中添加条目来设置的。现在,资源控制功能提供了可定义内核的 IPC 功能行为的资源控制。这些资源控制将替换 /etc/system 可调参数。
此 Solaris 系统上的 /etc/system 文件中可能包含过时参数。如果是这样,这些参数将像在以前的 Solaris 发行版中一样用来初始化缺省的资源控制值。但是,不推荐使用过时参数。
要查看哪些 IPC 对象在使用项目资源,请使用带有 -J 选项的 ipcs 命令。要查看示例显示,请参见。有关 ipcs 命令的更多信息,请参见 。
有关 Solaris 系统调优的信息,请参见。
资源控制约束机制
资源控制提供了一种系统资源约束机制,可以防止进程、任务、项目和区域占用指定的系统资源量。此机制通过防止占用过多的资源,可使系统更易于管理。
约束机制可用于支持容量规划过程。有一种偶尔会用到的约束,它可以提供有关应用程序资源需求的信息,而不必拒绝为应用程序分配的资源。
项目属性机制
资源控制还可以作为资源管理功能的简单属性机制。例如,可用于公平份额调度器 (fair share scheduler, FSS) 调度类中项目的 CPU 份额数由 project.cpu-shares 资源控制定义。由于此控制为项目指定了固定的份额数,因此,与超过控制有关的各项操作不相关联。在此上下文中,将 project.cpu-shares 控制的当前值视为指定项目的属性。
另一类型的项目属性用于控制附加到项目的进程集合对物理内存资源的消耗。这些属性具有前缀 rcap,例如 rcap.max-rss。与资源控制类似,此类型的属性也在 project 数据库中配置。但是,资源控制由内核同步执行,而资源上限则由资源上限执行守护进程 rcapd
在用户级别上异步执行。有关 rcapd 的信息,请参见和 rcapd (1M)。
project.pool 属性用于指定项目的池绑定。有关资源池的更多信息,请参见。
配置资源控制和属性
资源控制功能通过 project 数据库来配置。请参见。资源控制和其他属性在 project 数据库条目的最终字段中设置。与每个资源控制关联的值都括在括号中,并显示为用逗号分隔的纯文本。括号中的值构成一条&操作子句&。每条操作子句都包含一个权限级别、一个阈值以及一个与特定阈值关联的操作。每个资源控制可以有多条操作子句,这些子句也用逗号分隔。以下条目定义了项目实体的按任务轻量进程限制和按进程最多 CPU 时间限制。当进程运行 1 小时之后,process.max-cpu-time 将会向此进程发送 SIGTERM;如果此进程持续运行的总时间达到 1 小时 1 分钟,则会向此进程发送 SIGKILL。请参见。
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
注 & 在启用了区域的系统上,使用稍有不同的格式在区域配置中指定整个区域范围的资源控制。有关更多信息,请参见。
使用 rctladm 命令,可以对全局范围的资源控制功能进行运行时询问和修改。使用 prctl 命令,可以对本地范围的资源控制功能进行运行时询问和修改。
有关更多信息,请参见、 和 。
注 & 在安装了区域的系统上,不能在非全局区域中使用 rctladm 来修改设置。您可以在非全局区域中使用 rctladm 来查看每个资源控制的全局日志状态。
可用的资源控制
下表列出了此发行版中可用的标准资源控制。
该表介绍了每个控制所约束的资源,还列出了 project
数据库使用的该资源的缺省单位。缺省单位有两种类型:
数量代表有限数量。
索引代表最大有效标识符。
因此,project.cpu-shares 指定了项目有资格享有的份额数。process.max-file-descriptor 指定了可由
系统调用分配给进程的最高文件编号。
标准资源控制
project.cpu-cap
Solaris 10 8/07:项目可以占用的 CPU 资源量的绝对限制。值 100 表示将一个 CPU 的 100% 用作 project.cpu-cap 设置。值 125 表示 125%,因为在使用 CPU 上限时,100% 对应于系统中的一个 CPU。
数量(CPU 数目)&
project.cpu-shares
授予此项目的 CPU 份额数,用于公平份额调度器(请参见 )。
数量(份额)&
project.max-crypto-memory
libpkcs11 用于加速硬件加密的内核内存总量。内核缓冲区分配以及与会话相关的结构分配都按照此资源控制执行。
大小(字节)&
project.max-locked-memory
允许的锁定物理内存总量。&
如果将 priv_proc_lock_memory 指定给用户,请考虑同时设置此资源控制,以防止该用户锁定所有内存。
Solaris 10 8/07:请注意,在 Solaris 10 8/07 发行版中,此资源控制取代了 project.max-device-locked-memory,后者已被删除。
大小(字节)&
project.max-port-ids
允许的最大事件端口数。&
数量(事件端口数) &
project.max-sem-ids
此项目允许的最大信号 ID 数。&
数量(信号量 ID)&
project.max-shm-ids
此项目允许的最大共享内存 ID 数。&
数量(共享内存 ID)&
project.max-msg-ids
此项目允许的最大消息队列 ID 数。&
数量(消息队列 ID)&
project.max-shm-memory
此项目允许的 System V 共享内存总量。&
大小(字节)&
project.max-lwps
此项目可同时使用的最大 LWP 数。&
数量 (LWP)&
project.max-tasks
此项目中允许的最大任务数。&
数量(任务数)&
project.max-contracts
此项目中允许的最大合同数。&
数量(合同)&
task.max-cpu-time
此任务进程可用的最多 CPU 时间。&
时间(秒)&
task.max-lwps
此任务的进程可同时使用的最大 LWP 数。&
数量 (LWP)&
process.max-cpu-time
此进程可用的最长 CPU 时间。&
时间(秒)&
process.max-file-descriptor
此进程可用的最大文件描述符索引。&
索引(最大文件描述符)&
process.max-file-size
此进程可写入的最大文件偏移。&
大小(字节)&
process.max-core-size
此进程创建的最大核心转储文件大小。&
大小(字节)&
process.max-data-size
此进程可用的最大堆栈缓冲池内存。&
大小(字节)&
process.max-stack-size
此进程可用的最大堆栈缓冲池内存段。&
大小(字节)&
process.max-address-space
此进程可用的最大地址空间量,即段大小的总和。&
大小(字节)&
process.max-port-events
每事件端口允许的最大事件数。&
数量(事件数) &
process.max-sem-nsems
每信号集允许的最大信息数。&
数量(每集合中的信号数)&
process.max-sem-ops
每 semop 调用允许的最大信号操作数(在 semget() 时间从资源控制复制的值)。
数量(操作数)&
process.max-msg-qbytes
消息队列中消息的最大字节数(在 msgget() 时间从资源控制复制的值)。
大小(字节)&
process.max-msg-messages
消息队列中的最大消息数(在 msgget() 时间从资源控制复制的值)。
数量(消息数)&
您可以在未设置或更改任何资源控制的系统上显示资源控制的缺省值。此类系统在 /etc/system 或 project 数据库中不包含任何非缺省条目。要显示值,请使用 prctl 命令。
区域范围的资源控制
区域范围的资源控制可限制区域内所有进程实体总的资源使用情况。也可以使用全局属性名称来设置区域范围的资源控制,如和中所述。
区域范围的资源控制
zone.cpu-cap
Solaris 10 5/08:非全局区域可以占用的 CPU 资源量的绝对限制。值 100 表示将一个 CPU 的 100% 用作 project.cpu-cap 设置。值 125 表示 125%,因为在使用 CPU 上限时,100% 对应于系统中的一个 CPU。
数量(CPU 数目)&
zone.cpu-shares
此区域的公平份额调度器 (fair share scheduler, FSS) CPU 份额数&
数量(份额)&
zone.max-locked-memory
区域可用的锁定物理内存的总量&
在将 priv_proc_lock_memory 指定给区域时,请考虑同时设置此资源控制,以防止该区域锁定所有内存。
大小(字节)&
zone.max-lwps
此区域可同时使用的最大 LWP 数&
数量 (LWP)&
zone.max-msg-ids
此区域允许的最大消息队列 ID 数&
数量(消息队列 ID)&
zone.max-sem-ids
此区域允许的最大信号量 ID 数&
数量(信号量 ID)&
zone.max-shm-ids
此区域允许的最大共享内存 ID 数&
数量(共享内存 ID)&
zone.max-shm-memory
此区域允许的系统 V 共享内存总量&
大小(字节)&
zone.max-swap
可用于此区域的用户进程地址空间映射和 tmpfs 挂载的交换空间总量
大小(字节)&
有关配置区域范围的资源控制的信息,请参见和。要在 lx 标记区域中使用区域范围的资源控制,请参见。
请注意,可将区域范围的资源控制应用于全局区域。有关其他信息,请参见和。
所有资源控制均定义了标识资源控制类型的全局标志。系统使用这些标志将基本类型信息传递给应用程序(如 prctl 命令)。应用程序使用此信息确定以下内容:
适用于每个资源控制的单位字符串
解释标度值时要使用的正确标度
以下全局标志均可用:
资源控制类型字符串&
RCTL_GLOBAL_BYTES&
RCTL_GLOBAL_SECONDS&
RCTL_GLOBAL_COUNT&
标度值可用于资源控制。以下示例显示了标度阈值:
task.max-lwps=(priv,1K,deny)
注 & 单位修饰符由 prctl、projadd 和 projmod 命令接受。您不能在 project 数据库本身中使用单位修饰符。
资源控制值和权限级别
资源控制的阈值设立了一个执行点,在此点可能会触发本地操作或者发生全局操作(如日志记录)。
资源控制的每个阈值都必须与某个权限级别相关联。权限级别必须为以下三种类型之一。
基本,此类型的权限级别可由调用过程的属主修改
特权,此类型的权限级别仅可由特权(超级用户)调用方修改
系统,此类型的权限级别在操作系统实例的持续时间内固定不变
每个资源控制都保证有一个由系统或资源提供器定义的系统值。系统值表示操作系统的当前实现可以提供的资源量。
可以定义任意数量的权限值,但仅允许定义一个基本值。缺省情况下,将为没有指定权限值时执行的操作指定基本权限。
资源控制值的权限级别在资源控制块(如 RCTL_BASIC、RCTL_PRIVILEGED 或 RCTL_SYSTEM)的权限字段中定义。有关更多信息,请参见 。您可以使用 prctl 命令来修改与基本级别和特权级别关联的值。
针对资源控制值的全局和本地操作
针对资源控制值可执行两种类别的操作: 全局操作和本地操作。
针对资源控制值的全局操作
全局操作应用于系统中每个资源控制的资源控制值。您可以使用
手册页中所述的 rctladm 命令来执行以下操作:
显示活动系统资源控制的全局状态
设置全局日志操作
您可以对资源控制禁用或启用全局日志操作。通过指定严重性级别,您可以将 syslog 操作设置为特定的级别 syslog=level。level 的可能设置如下:
缺省情况下,没有资源控制违规的全局日志。在 Solaris 10 5/08 发行版中,为无法配置全局操作的资源控制添加了级别 n/a。
针对资源控制值的本地操作
本地操作对试图超过控制值的进程执行。对于为资源控制设定的每个阈值,您都可以关联一个或多个操作。有三种类型的本地操作: none、deny 和 signal=。这三种操作按以下方式使用:
对于请求数量大于阈值的资源请求不执行任何操作。在不影响应用程序进度的情况下监视资源的使用情况时,此操作非常有用。虽然超过阈值的进程不会受到影响,但是您还可以启用在超过资源控制时显示的全局消息。
您可以拒绝请求数量大于阈值的资源请求。例如,如果新的进程超过控制值,则带有操作 deny 的 task.max-lwps 资源控制会导致 fork 系统调用失败。请参见
您可以在超过资源控制时启用全局信号消息操作。当超过阈值时,会向进程发送信号。如果进程占用了其他资源,则不会发送其他信号。 中列出了可用的信号。
并非所有的操作都可应用于每个资源控制。例如,某个进程的 CPU 份额数不能超过为其所属的项目指定的 CPU 份额数。因此,不允许对 project.cpu-shares 资源控制执行拒绝操作。
由于存在实现限制,因此,每个控制的全局属性可以限制可对阈值设置的可用操作的范围。(请参见
手册页。)下表列出了可用信号操作。有关信号的其他信息,请参见
可用于资源控制值的信号
终止进程。&
发送挂起信号。当载波在断开的线路上停止时出现。发送给控制终端的进程组的信号。&
终止进程。由软件发送的终止信号。&
终止进程并中止程序。&
停止进程。作业控制信号。&
超过了资源控制限制。由资源控制功能生成。&
终止进程。超过了文件大小限制。&
仅可用于具有 RCTL_GLOBAL_FILE_SIZE 属性的资源控制 (process.max-file-size)。有关更多信息,请参见 。
终止进程。超过了 CPU 时间限制。&
仅可用于具有 RCTL_GLOBAL_CPUTIME 属性的资源控制 (process.max-cpu-time)。有关更多信息,请参见 。
资源控制标志和属性
系统的每个资源控制都有一组特定的关联属性。这组属性定义为一组标志,这些标志与此资源的所有受控实例关联。不能修改全局标志,但是可以使用 rctladm 或 getrctl 系统调用检索这些标志。
本地标志可为特定进程或进程集合中资源控制的特定阈值定义缺省行为和配置。一个阈值的本地标志不会影响同一资源控制的其他已定义阈值的行为。但是,全局标志会影响与特定控制关联的每个值的行为。可以在本地标志对应的全局标志提供的约束内,使用 prctl 命令或 setrctl 系统调用对本地标志进行修改。请参见 。
有关本地标志、全局标志及其定义的完整列表,请参见 。
要确定在达到特定资源控制的阈值时的系统行为,请使用 rctladm 显示此资源控制的全局标志。例如,要显示 process.max-cpu-time 的值,请键入以下内容:
$ rctladm process.max-cpu-time
process.max-cpu-time
syslog=off
[ lowerable no-deny cpu-time inf seconds ]
全局标志表示以下内容。
不需要超级用户权限来减小此控制的权限值。
即使当超过阈值时,也从不拒绝对资源的访问。
SIGXCPU 可用于在到达此资源的阈值时发送。
资源控制的时间值。
不能设置权限类型为 basic 的资源控制值。只允许有特权的资源控制值。
不能对资源控制值设置本地信号操作。
不能为此资源控制设置全局 syslog 消息操作。
超出阈值时总是拒绝资源请求。
资源控制的计数(整数)值。
资源控制大小的单位。
使用 prctl 命令可以显示资源控制的本地值和操作。
$ prctl -n process.max-cpu-time $$
process 353939: -ksh
process.max-cpu-time
privileged
signal=XCPU
为两个阈值都设置了 max (RCTL_LOCAL_MAXIMAL) 标志,并且为此资源控制定义了 inf (RCTL_GLOBAL_INFINITE) 标志。inf 值可以是无穷大,但从不会达到。因此,如同配置的那样,两个阈值都表示从不会超过的无穷大值。
资源控制执行
一个资源可以存在多个资源控制。进程模型中的每个内嵌项目级别均可存在资源控制。如果同一资源的不同容器级别上的资源控制都处于活动状态,则首先执行最小容器的控制。因此,如果同时遇到 process.max-cpu-time 和 task.max-cpu-time 这两个控制,则先对前者执行操作。
进程集合、容器关系及其资源控制集全局监视资源控制事件
通常,进程的资源消耗情况是未知的。要获取更多信息,请尝试执行全局资源控制操作,通过 rctladm 命令可实现这些操作。使用 rctladm 可以对资源控制设置 syslog 操作。然后,如果此资源控制管理的任意实体达到阈值,则会在已配置的日志级别上记录系统消息。有关更多信息,请参见和
应用资源控制
在登录或者调用 newtask、su 或项目识别的其他启动程序 at、 batch 或 cron 时,可以为项目指定 中列出的每个资源控制。每个启动的命令都会在发出调用的用户的缺省项目的单独任务中启动。有关更多信息,请参见 、、、 和 。
对 project 数据库中条目的更新(无论是对 /etc/project 文件还是对网络名称服务中此数据库表示的内容)不会应用于当前活动的项目。更新在新任务通过登录或
newtask 加入项目时应用。
在正在运行的系统上临时更新资源控制值
在 project 数据库中更改的值仅对项目中启动的新任务有效。但是,您可以使用 rctladm 命令和 prctl 命令在正在运行的系统上更新资源控制。
更新日志状态
rctladm 命令会影响系统范围内每个资源控制的全局日志状态。此命令可用于在超过控制时查看 syslog 日志的全局状态并设置此日志的级别。
更新资源控制
使用 prctl 命令,可以按进程、按任务或按项目查看资源控制值和操作,并临时更改资源控制值和操作。项目、任务或进程的 ID 作为输入提供,并且此命令在定义了控制的级别上针对资源控制运行。
对值和操作所做的修改会立即生效。但是,这些修改仅应用于当前的进程、任务或项目。更改不会在 project 数据库中记录。如果重新启动系统,则修改会丢失。必须在 project 数据库中对资源控制进行永久性更改。
所有可在 project 数据库中修改的资源控制设置也可使用 prctl 命令进行修改。可以添加或删除基本值和权限值,还可以修改其操作。缺省情况下,基本类型可用于所有设置的操作,但是具有超级用户权限的进程和用户还可以修改特权资源控制。不能更改系统资源控制。
用于资源控制的命令
下表显示了用于资源控制的命令。
可用于查看使用项目资源的 IPC 对象&
可用于对资源控制功能在本地范围进行运行时询问和修改&
可用于对资源控制功能在全局范围进行运行时询问和修改&
手册页介绍了通过项目数据库提供的资源控制,其中包括单位和标度因数。
管理资源控制(任务)
本章介绍如何管理资源控制功能。
有关资源控制功能的概述,请参见。
管理资源控制(任务图)
设置资源控制。&
为 /etc/project 文件中的项目设置资源控制。
获取或修改本地范围的活动进程、任务或项目的资源控制值。&
对与系统上的活动进程、任务或项目关联的资源控制进行运行时询问和修改。&
在正在运行的系统上,查看或更新资源控制的全局状态。&
查看整个系统范围内每个资源控制的全局日志状态。还在超过控制时设置 syslog 日志的级别。
报告活动的进程间通信 (interprocess communication, IPC) 功能的状态。&
显示有关活动的进程间通信 (interprocess communication, IPC) 功能的信息。查看哪些 IPC 对象正在使用项目资源。 &
确定是否为 Web 服务器分配了足够的 CPU 容量。&
设置对资源控制执行的全局操作。通过此操作,可以接收任何所设资源控制值太低的实体的通知。&
设置资源控制
如何为项目中的每个任务设置最大 LWP 数
此过程将名为 x-files 的项目添加到 /etc/project 文件,并为在此项目中创建的任务设置最大 LWP 数。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
使用带有 K 选项的 -projadd 命令创建名为 x-files 的项目。将在此项目中创建的每个任务的最大 LWP 数设置为 3。
# projadd -K 'task.max-lwps=(privileged,3,deny)' x-files
使用以下方法之一查看 /etc/project 文件中的条目:
# projects -l
projid : 0
comment: ""
groups : (none)
projid : 100
comment: ""
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
task.max-lwps
privileged
uid=0(root) gid=1(other) projid=100(x-files)
# ps -o project,taskid -p $$
PROJECT TASKID
/* creates second LWP */
/* creates third LWP */
/* cannot create more LWPs */
Vfork failed
如何对一个项目设置多个控制
/etc/project 文件可以包含每个项目的多个资源控制设置,还可包含每个控制的多个阈值。阈值在操作子句中定义,这些子句使用逗号分隔多个值。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
使用带有 -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 创建都失败,如前一示例所示。
在 basic 级别对每个进程的最大文件描述符数的限制,它会强制任何超过最大数量的 open 调用均失败。
使用以下方法之一,查看文件中的条目:
# projects -l
projid : 100
comment: ""
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 命令,可以对与系统上的活动进程、任务或项目关联的资源控制进行运行时询问和修改。有关更多信息,请参见
如何使用 prctl 命令显示缺省资源控制值
必须在未设置或更改任何资源控制的系统上使用此过程。/etc/system 文件或 project 数据库中只能有非缺省条目。
在任意进程(如正在运行的当前 shell)中使用 prctl 命令。
# prctl $$
process: 100337: -sh
process.max-port-events
privileged
process.crypto-buffer-limit
process.max-crypto-sessions
process.add-crypto-sessions
privileged
process.min-crypto-sessions
privileged
process.max-msg-messages
privileged
process.max-msg-qbytes
privileged
process.max-sem-ops
privileged
process.max-sem-nsems
privileged
process.max-address-space
privileged
process.max-file-descriptor
privileged
process.max-core-size
privileged
process.max-stack-size
privileged
process.max-data-size
privileged
process.max-file-size
privileged
deny,signal=XFSZ
process.max-cpu-time
privileged
signal=XCPU
task.max-cpu-time
task.max-lwps
project.max-contracts
privileged
project.max-device-locked-memory
privileged
project.max-port-ids
privileged
project.max-shm-memory
privileged
project.max-shm-ids
privileged
project.max-msg-ids
privileged
project.max-sem-ids
privileged
project.max-tasks
project.max-lwps
project.cpu-shares
privileged
zone.max-lwps
zone.cpu-shares
privileged
如何使用 prctl 命令显示给定资源控制的信息
显示正在运行的当前 shell 的最大文件描述符。
# prctl -n process.max-file-descriptor $$
process: 110453: -sh
process.max-file-descriptor
privileged
如何使用 prctl 临时更改值
此示例过程使用 prctl 命令临时添加一个新的权限值,以便拒绝在每个 x-files 项目中使用三个以上的 LWP。可将此结果与中的结果进行对比。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
使用 newtask 加入 x-files 项目。
# newtask -p x-files
使用带有 -p 选项的 id 命令检验是否已加入正确的项目。
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
project.max-lwps
privileged
如何使用 prctl 降低资源控制值
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
使用带有 -r 选项的 prctl 命令更改 process.max-file-descriptor 资源控制的最低值。
# prctl -n process.max-file-descriptor -r -v 128 $$
如何使用 prctl 显示、替换和检验项目的控制值
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见。
显示项目 group.staff 中 project.cpu-shares 的值。
# prctl -n project.cpu-shares -i project group.staff
project: 2: group.staff
project.cpu-shares
privileged
将当前 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
project.cpu-shares
privileged
使用 rctladm
如何使用 rctladm
使用 rctladm 命令可以对资源控制功能的全局状态进行运行时询问和修改。有关更多信息,请参见
例如,您可以使用带有 -e 选项的 rctladm 来启用资源控制的全局 syslog 属性。当超过控制时,便会在指定的 syslog 级别记录通知。要启用 process.max-file-descriptor 的全局 syslog 属性,请键入以下命令:
# rctladm -e syslog process.max-file-descriptor
在不使用参数的情况下,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
使用 ipcs 实用程序可以显示有关活动的进程间通信 (interpr}

我要回帖

更多关于 从零开始的异世界生活 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信