一. 监视文件系统增长
在 AIX 5L 系统上,管理员需要监视文件系统增长以防止文件系统装满。
基于“Berkeley 磁盘配额系统”(Berkeley Disk Quota System) 的磁盘配额系统提供了一种控制磁盘空间使用的有效方法。可以为各个用户或组定义配额系统,并且每个日志文件系统都维护有配额系统。
磁盘配额系统基于下列参数建立限制,这些参数可使用 edquota 命令进行更改:
(1)用户或组的软限制
(2)用户或组的硬限制
(3)配额过渡期
软限制定义用户一定不能超出的 1 KB 磁盘块或文件数量。硬限制定义用户在已建立的磁盘配额之下能够累积的最大磁盘块或文件数量。配额过渡期允许用户在短时间(缺省值为一周)内超过软限制。如果用户未能在指定的时间内将磁盘使用减少到软限制之下,系统将把该软限制解释为允许的最大分配量,并且不再为该用户分配更多的存储空间。通过删除足够的文件以将磁盘使用减少到软限制之下,用户可以改变这种状况。
磁盘配额系统在位于启用了配额的文件系统根目录中的 quota.user 和 quota.group 文件中跟踪用户和组配额。这些文件是使用 quotacheck 和 edquota 命令创建的,并且可以使用 quota 命令来读取。
1.1 从超出配额的条件中恢复
要在超出配额限制时减少文件系统使用,您可以使用下列方法:
(1)终止导致文件系统达到其限制的当前进程,删除多余文件以使该限制低于配额,然后重试失败的程序。
(2)如果您在运行诸如 vi 等编辑器,可以使用 Shell 转义序列检查文件空间,删除多余的文件,然后返回而不丢失编辑过的文件。或者,如果是在使用 C 或 Korn Shell,可以用 Ctrl-Z 键序列挂起编辑器,发出文件系统命令,然后用 fg(前台)命令返回。
(3)临时将文件写到还未超过配额限制的文件系统,删除多余的文件,然后将该文件归还到正确的文件系统。
quotaon 命令启用由 File System 参数指定的一个或多个文件系统的磁盘配额。指定的文件系统必须在 /etc/filesystems 文件中使用 quotas 进行定义,并且必须装入(mounted)。quotaon 命令在关联文件系统的根目录中寻找缺省配额文件 quota.user 和 quota.group。可以在 /etc/filesystems 文件中更改这些文件名。
缺省情况下,此命令同时启用用户和组配额。-u 标志仅启用用户配额;-g 标志仅启用组配额。同时指定 –g 和 –u 等价于缺省选项。-a 标志指定要启用 /etc/filesystems 文件中指示的所有具有磁盘配额的文件系统。
quotaoff 命令禁用一个或多个文件系统的磁盘配额。缺省情况下,此命令同时禁用用户和组配额。-a、-g 和 -u 标志的操作与 quotaon 命令的对应标志一样。
-v 标志为分别使用 quotaon 和 quotaoff 命令来启用或禁用了配额的每个文件系统打印一条消息。只有 root 用户才能执行此命令。
用于配额的常用标志
标志 | 描述 |
-a | 启用或禁用 /etc/filesystems 文件中指示的所有具有读-写权限和磁盘配额的文件系统。当与 -g 标志一起使用时,将仅启用或禁用 /etc/filesystems 文件中指示的组配额;当与 -u 标志一起使用时,将仅启用或禁用 /etc/filesystems 文件中指示的用户配额。 |
-g | 指定仅启用或禁用组配额。 |
-u | 指定仅启用或禁用用户配额。 |
-v | 为启用或禁用了配额的每个文件系统打印一条消息。 |
1.1.1 命令
通常,只有包含用户主目录和文件的文件系统才需要磁盘配额。在下列条件下应该考虑实现磁盘配额系统:
(1)系统只有有限的磁盘空间。
(2)您需要更多的文件系统安全性。
(3)您的磁盘使用程度非常大,例如在许多部门。
如果这些情况不适用于您的环境,您可能不希望通过实现磁盘配额系统来创建磁盘使用限制。
磁盘配额系统只能用于日志文件系统。
注意:请不要为 /tmp 文件系统建立磁盘配额。
1.1.2 要建立磁盘配额系统,可以使用下面的过程:
1). 使用 root 权限登录。
2). 确定哪些文件系统需要配额。
注意:由于许多编辑器和系统实用程序在 /tmp 文件系统中创建临时文件,所以一定不要为其建立配额。
3). 使用 chfs 命令来在 /etc/filesystems 文件中添加的 userquota 和 groupquota 配额配置属性。下面的示例使用 chfs 命令启用 /home 文件系统上的用户配额:
# chfs -a "quota = userquota" /home
|
要同时启用 /home 文件系统上的用户和组配额,可以输入命令:
# chfs -a "quota = userquota,groupquota" /home
/etc/filesystems 文件中的对应条目将如下所示:
/home:
dev = /dev/hd1
vfs = jfs
log = /dev/hd8
mount = true
check = true
quota = userquota,groupquota
options = rw
4). 可选地指定替代的磁盘配额文件名。quota.user 和 quota.group 文件名是位于启用了配额的文件系统根目录中的缺省名称。您可以为这些具有 /etc/filesystems 文件中的 userquota 和 groupquota 属性的配额文件指定替代的名称或目录。
下面的示例使用 chfs 命令为 /home 文件系统建立用户和组配额,并指定了 myquota.user 和 myquota.group 配额文件:
# chfs -a "userquota = /home/myquota.user"
-a "groupquota = /home/myquota.group" /home
/etc/filesystems 文件中的对应条目将如下所示:
/home:
dev = /dev/hd1
vfs = jfs
log = /dev/hd8
mount = true
check = true
quota = userquota,groupquota
userquota = /home/myquota.user
groupquota = /home/myquota.group
options = rw
5). 如果指定的文件系统先前尚未装入,则将其装入。
6). 为每个用户或组设定所需的配额限制。使用 edquota 命令,创建每个用户或组的允许磁盘空间和最大文件数量的软和硬限制。
下面的示例条目显示了用户 gpsilva 的配额限制:
Quotas for user gpsilva:
/home:blocks in use:30, limits (soft = 100, hard = 150)
inodes in use:73, limits (soft = 200, hard = 250)
|
此用户已使用了最大 100 KB 的磁盘空间中的 30 KB。在最多 200 个文件中,gpsilva 已创建了 73 个文件。此用户拥有 50 KB 的磁盘空间缓冲区和 50 个可分配到临时存储的文件。
在为多个用户建立磁盘配额时,可以将 –p 标志与 edquota 命令结合使用,以将一个用户配额复制到另一个用户。
要为用户 tneiva 复制为用户 gpsilva 建立的配额,可以输入命令:
# edquota -p gpsilva tneiva
|
7). 使用 quotaon 命令启用配额系统。quotaon 命令启用指定文件系统的配额,或在使用了 –a 标志时,启用 /etc/filesystems 文件中指示的所有具有配额的文件系统的配额。
8). 使用 quotacheck 命令检查配额文件与实际磁盘使用的一致性。
注意:建议您每次在首次启用某个文件系统上的配额时和重新启动系统之后执行此检查。
要在系统启动期间启用此检查并打开配额,请在 /etc/rc 文件末尾添加下列行:
echo " Enabling filesystem quotas "
/usr/sbin/quotacheck -a
/usr/sbin/quotaon -a
1.1.3 一些相关的命令,即 edquota 命令、quotacheck 命令和 repquota 命令
下面的示例演示了这些命令的典型使用场合:
1. 要启用 /usr/Tivoli/tsm/server/db 文件系统的用户配额,可以输入命令:
# quotaon -u /usr/Tivoli/tsm/server/db
|
2. 要禁用 /etc/filesystems 文件中所有文件系统的用户和组配额并打印一条消息,可以输入命令:
# quotaoff -v -a
|
3. 要显示您作为用户 neivac 的配额,可以输入命令:
$ quota
系统将显示下列信息:
User quotas for user neivac (uid 502):
Filesystem blocks quota limit grace Files quota limit grace
/u 20 55 60 20 60 65
4. 要显示用户 gpsilva 作为 root 用户的配额,可以输入命令:
quota -u gpsilva
系统将显示下列信息:
User quotas for user gpsilva (uid 2702):
Filesystem blocks quota limit grace files quota limit grace
/u 48 50 60 7 60 60
1.2 从装满的文件系统中恢复
当太多的文件装满分配的空间时,就产生了装满的文件系统。这可能是由创建许多不必要文件的失控进程导致的。您可以使用下面的过程解决此问题。
1.2.1 修复装满的 /(根)文件系统
当根文件系统 (/) 已装满时,请检查以下事项:
(1)使用 who 命令读取 /etc/security/failedlogin 文件的内容:
# who /etc/security/failedlogin
|
TTY 重新产生得太快的情况会创建失败的登录条目。要在读取或保存输出之后清空该文件,可以执行以下命令:
# cp /dev/null /etc/security/failedlogin
|
(2)检查 /dev 目录中输入不正确的设备名称。如果设备名称输入不正确,例如将 rmt0 误输入为 rmto,则会在 /dev 中创建一个名为 rmto 的文件。此命令会正常继续运行,直到装满整个根文件系统,然后失败。/dev 是根 (/) 文件系统的一部分。查找不属于设备的条目(没有主要编号或次要编号)。要检查此情况,可以使用以下命令:
# cd /dev
# ls -l | pg
total 40
drwxrwx--- 2 root system 4096 Nov 29 14:19 .SRC-unix
crw-rw---- 1 root system 10, 0 Nov 10 17:18:00 IPL_rootvg
srwxrwxrwx 1 root system 0 Nov 28 17:30 SRC
crw------- 1 root system 22, 1 Nov 23 12:14 __pv22.1.323758
crw------- 1 root system 22, 1 Nov 23 12:14 __pv22.1.381014
crw------- 1 root system 22, 1 Nov 23 12:15 __pv22.1.397388
......
crw-rw-rwT 1 root system 17, 0 Nov 10 16:22 usb0
crw-rw-rw- 1 root system 15, 0 Nov 10 16:22 usbhc0
crw-rw-rw- 1 root system 15, 1 Nov 10 16:22 usbhc1
crw------- 1 root system 11, 0 Nov 10 16:22 vio0
crw-rw-rw- 1 root system 21, 0 Nov 10 16:22 vty0
crw-rw-rw- 1 root system 21, 1 Nov 10 16:22 vty1
drwxr-xr-x 2 root system 256 Nov 10 17:18 xti
crw-rw-rw- 1 root system 2, 3 Nov 10 17:18 zero
在原本指示普通文件的文件大小的相同位置,设备文件有两个逗号分隔的编号。例如:
crw-rw-rw- 1 root system 24, 0 Nov 10 16:22 rmt0
如果显示文件名或大小的位置指示某个无效设备,如下面的示例所示,则删除关联的文件:
crw-rw-rw- 1 root system 9375473 Oct 25 10:19 rmto
注意:
1. 请不要删除 /dev 目录中的有效设备名称。无效设备的特点之一是一个大于 500 字节的关联文件大小。
2. 如果正在运行系统审核,则缺省的 /audit 目录会快速装满,并需要引起注意。
可以使用 find 命令来检查可删除的超大型文件。例如,要查找根 (/) 目录中大于 1 MB 的所有文件,可以使用以下命令:
# find / -xdev -size +1024 -ls |sort -r +6
|
此命令查找所有大于 1 MB 的文件,并对它们进行从最大到最小的逆向排序。find 命令的其他标志,如 –newer,可能在此搜索中非常有用。
注意:在检查根目录时, /dev 目录中设备的主要和次要编号将夹杂实际的文件和文件大小。可以忽略逗号分隔的主要和次要编号。
在删除任何文件之前,可以使用 fuser 命令确保当前没有任何用户进程正在使用该文件:fuser filename
其中,filename 是可疑大型文件的名称。如果文件在删除时已打开,则只会将其从目录清单中删除。在拥有打开的文件的进程终止之前,分配给该文件的块不会释放。
1.2.2 修复装满的 /var 文件系统
当 /var 文件系统装满时,请检查以下事项:
可以使用 find 命令查找 /var 目录中的大型文件。例如:
# find /var -xdev -size +2048 -ls| sort -r +6
|
1. 检查 /var/tmp 中过时或残余的文件
检查 /var/adm/wtmp 文件的大小,该文件记录所有 login、rlogin 和 telnet 会话日志。除非记帐系统 (system accounting) 正在运行,否则该日志将无限增长。 记帐系统在每晚清空该日志。可以清空或编辑 /var/adm/wtmp 文件,以删除旧的或不需要的信息。要清空该文件,可以使用下面的命令:
# cp /dev/null /var/adm/wtmp
#
要编辑 /var/adm/wtmp 文件,请首先使用下面的命令临时复制该文件:
# /usr/sbin/acct/fwtmp < /var/adm/wtmp >/tmp/out
#
编辑 /tmp/out 文件以删除不需要的条目,然后使用以下命令替换原始文件:
# /usr/sbin/acct/fwtmp -ic < /tmp/out > /var/adm/wtmp
|
2. 使用下面的过程清空 /var/adm/ras 目录中的错误日志。除非手动清空,否则错误日志永远不会清空。
注意:切勿使用 cp /dev/null 命令来清空错误日志。零长度的 errlog 文件将禁用操作系统的错误日志记录功能,必须从备份中将其替换。
(1)使用以下命令终止 error 守护进程:
# /usr/lib/errstop
|
(2)使用以下命令之一删除错误日志文件或将其移动到其他文件系统:
# rm /var/adm/ras/errlog
或者
# mv /var/adm/ras/errlog filename
|
其中 filename 是被移动的 errlog 文件的名称。
注意:如果删除错误日志文件,则会删除历史错误数据。
(3)使用以下命令重新启动 error 守护进程:
# /usr/lib/errdemon
|
注意:可以考虑在 cron 中运行以下条目以限制 errorlog :
0 11 * * * /usr/bin/errclear -d S,O 30
0 12 * * * /usr/bin/errclear -d H 90
检查此目录中的 trcfile 文件是否非常大。如果该文件非常大,并且当前没有运行跟踪,可以使用以下命令删除该文件:
# rm /var/adm/ras/trcfile
|
如果将转储设备设置为 hd6(缺省转储设备),/var/adm/ras 目录中可能存在许多 vmcore* 文件。如果这些文件的文件日期很旧或者您不希望保留它们,可以使用 rm 命令将其删除。
检查 /var/spool 目录,其中包含队列子系统文件。可以使用以下命令清空队列子系统:
# stopsrc -s qdaemon
0513-044 The qdaemon Subsystem was requested to stop.
# rm /var/spool/lpd/qdir/*
# rm /var/spool/lpd/stat/*
# rm /var/spool/qdaemon/*
# startsrc -s qdaemon
0513-059 The qdaemon Subsystem has been started.Subsystem PID is 291042.
|
检查 /var/adm/acct 目录,其中包含记帐记录。如果记帐系统正在运行,此目录可能包含多个大型文件。
检查 /var/preserve 目录中的已终止 vi 会话。一般情况下,可以安全地删除这些文件。如果用户希望恢复某个会话,可以使用 vi –r 命令列出所有可恢复的会话。要删除某个特定会话,可以使用命令 vi –r filename。
修改 /var/adm/sulog 文件,其中记录了尝试使用 su 命令的次数,以及每次尝试是否成功。这是一个平面文件,可使用自己喜欢的编辑器进行查看和修改。如果删除该文件,则会在下次尝试使用 su 命令时重新创建它。
修改 /var/tmp/snmpd.log,其中记录了来自 snmpd 守护进程的事件。如果删除该文件,snmpd 守护进程将重新创建它。
注意:可以限制 /var/tmp/snmpd.log 文件的大小,以使其不会无限增长。可编辑 /etc/snmpd.conf 文件,以更改针对大小的适当部分中的数字(以字节为单位)。
1.2.3 修复装满的用户定义的文件系统
使用以下过程修复装满的用户定义的文件系统。
(1)删除旧的备份文件和核心文件。下面的命令删除所有 *.bak、.*.bak、a.out、core、* 或 ed.hup 文件:
find / /( -name "*.bak" -o -name core -o -name a.out -o /
-name "...*" -o -name ".*.bak" -o -name ed.hup /) /
-atime +1 -mtime +1 -type f -print | xargs -e rm -f
|
(2)要定期防止文件装满磁盘,可以作为 cron 进程的一部分运行 skulker 命令,并删除不必要的文件或临时文件。
skulker 命令清除 /tmp 目录中的文件、指定日期以前的文件、a.out 文件、核心文件和 ed.hup 文件。它作为记帐过程的一部分由 cron 命令在每天的非高峰时间段中运行(假设打开了记帐系统)。
cron 守护进程在指定的日期和时间运行 Shell 命令。可以按照 crontab 文件中包含的说明指定诸如 skulker 等定期计划的命令。使用 crontab 命令提交 crontab 文件。要编辑系统或根 crontab 文件,您必须拥有 root 用户权限。用户可以编辑他们自己的 crontab 文件。
1.2.4 修复其他文件系统和一般搜索技术
带 –size 标志使用 find 命令来定位大型文件,或者如果文件系统是最近装满的,可以使用 -newer 标志查找最近修改过的文件。要产生一个供 -newer 标志在查找时用作参照的文件,可使用以下 touch 命令:
touch mmddhhmm filename
|
其中 mm 是月份,dd 是日期,hh 是 24 小时格式的小时,mm 是分钟,filename 是要用 touch 命令创建的文件的名称。
在创建参照文件之后,可以使用以下命令查找较新的大型文件:
find /filesystem_name -xdev -newer touch_filename -ls
|
还可以使用 find 命令来定位在最近 24 小时内更改过的文件,如下面的示例所示:
find /filesystem_name -xdev -mtime 0 -ls
|
1.2.5 修复损坏的文件系统
当文件系统目录结构的索引节 (i-node) 或超级块 (superblock) 信息受到破坏时,文件系统就会受到破坏。这可能是由硬件相关的问题或由直接访问索引节或超结块信息的程序受到破坏而导致的。(以汇编语言和 C 编写的程序可以绕过操作系统并直接向硬件执行写入。)受到破坏的文件系统的症状之一是系统无法对位于特定文件系统中的数据进行定位、读取或写入。
要修复损坏的文件系统,您必须诊断问题然后修复问题。fsck 命令执行底层诊断和修复。
1. 使用 root 权限,通过下列 SMIT 快速路经之一卸载损坏的文件系统:smit unmountfs(用于固定硬盘驱动器上的文件系统)或 smit unmntdsk(用于移动磁盘上的文件系统)。
2. 通过运行 fsck 命令访问损坏的文件系统。在下面的示例中,fsck 命令检查位于 /dev/myfilelv 设备上的已卸载文件系统:
# fsck /dev/myfilelv
|
fsck 命令检查并交互式地修复不一致的文件系统。正常情况下,文件系统是一致的,fsck 命令只是报告文件系统中的文件、已使用的块和空闲块的数量。 如果文件系统不一致,fsck 命令将显示有关已发现的不一致性的信息,并提示您准许修复它们。fsck 命令在修复工作方面很谨慎,并尽量避免可能导致有效数据丢失的操作。但是在某些情况下,fsck 命令会建议销毁某个已损坏的文件。
3. 如果无法修复文件系统,则从备份中恢复。
二. 系统错误日志
AIX 5L 提供了一个错误日志记录功能,用于在错误日志中记录硬件和软件故障。此错误日志可用于参考目的,或者用于故障检测和纠正操作。
错误日志记录过程在操作系统模块检测到某个错误时开始。然后错误检测代码段将错误信息发送给 errsave 和 errlast 内核服务或 errlog 应用程序子例程,然后又在那里将错误信息写到 /dev/error 特殊文件。然后此过程将向收集的数据添加一个时间戳。可以使用 errtp 命令从错误日志中检索某个错误记录。
2.1 启动和停止错误日志记录
错误日志记录在系统初始化期间由 rc.boot 脚本自动启动,并在系统关闭期间由关闭脚本自动停止。
errdemon 程序启动错误日志记录守护进程,从 /dev/error 文件读取错误记录,并将条目写到系统错误日志。缺省的系统错误日志保存在 /var/adm/ras/errlog 文件中。最后一个错误条目放在非易失性随机访问存储器 (NVRAM) 中。在系统启动期间,将从 NVRAM 中读取此最后一个错误条目,并在启动错误日志记录守护进程时将此条目添加到错误日志。
2.1.1 errdemon 程序
errdemon 程序通常在系统启动期间自动启动,但是如果由于任何原因而将其终止并且需要重新启动它,您可以输入以下命令:
# /usr/lib/errdemon
2.1.2 errstop 命令
errstop 命令终止由 errdemon 程序启动的错误日志记录守护进程:
# /usr/lib/errstop
#
注意:运行 errstop 命令将禁用诊断和恢复功能。切勿在正常操作期间停止错误日志。如果停止错误日志记录守护进程,则会在将临时存储在内部缓冲区中的错误数据记录到错误日志文件之前,导致将该数据覆盖。只有在绝对必需并且清楚了解其后果的特殊情况下,才应该使用 errstop 命令。
2.1.3 错误日志文件
要确定系统的错误日志文件的路径,可以运行以下命令:
# /usr/lib/errdemon -l
Error Log Attributes
--------------------------------------------
Log File /var/adm/ras/errlog
Log Size 1048576 bytes
Memory Buffer Size 32768 bytes
Duplicate Removal true
Duplicate Interval 10000 milliseconds
Duplicate Error Maximum 1000
#
To change the maximum size of the error log file, enter:
# /usr/lib/errdemon -s 2000000
要更改错误日志设备驱动程序的内部缓冲区大小,可以输入以下命令:
# /usr/lib/errdemon -B 64000
0315-175 The error log memory buffer size you supplied will be rounded upto a multiple of 4096 bytes.
#
2.1.4 errpt 命令
要检索错误日志中的条目,可以使用 errpt 命令。errpt 命令使用错误日志中的条目生成错误报告。它包括相关的标志,用于选择与特定条件匹配的错误记录。通过使用缺省条件,您可以按照与发生和记录错误相反的顺序显示错误日志条目。
errpt 命令的常用标志
标志 | 描述 |
-a | 以详细格式显示有关错误日志文件中的错误的信息。如果与 –t 标志结合使用,则会显示模板文件中的所有信息。 |
-j ErrorID[,ErrorID] | 仅包括由 ErrorID(错误标识符)变量指定的错误日志条目。ErrorID 变量可由逗号 (,) 分隔,或包括在双引号 ("") 中并由逗号 (,) 或空格字符分隔。当与 –t 标志结合使用,将处理错误模板存储库中的条目。 |
-s StartDate | 指定在 StartDate 变量之后记入的所有记录,其中 StartDate 变量的形式为 mmddhhmmyy(月份、日期、小时、分钟和年份)。 |
-e EndDate | 指定在 EndDate 变量之前(并包括 EndDate)记入的所有记录,其中 EndDate 变量的形式为 mmddhhmmyy(月份、日期、小时、分钟和年份)。 |
下面的示例演示了 errpt 命令的部分用法:
(1)要显示已记录的所有错误的完整摘要报告,可以运行以下命令:
# errpt
IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION
26120107 1128173005 U S LIBLVM PHYSICAL VOLUME DEFINED AS MISSING
EC0BCCD4 1128173005 T H ent0 ETHERNET DOWN
67145A39 1128173005 U S SYSDUMP SYSTEM DUMP
F48137AC 1128173005 U O minidump COMPRESSED MINIMAL DUMP
9DBCFDEE 1128173005 T O errdemon ERROR LOGGING TURNED ON
EA88F829 1128134005 I O SYSJ2 USER DATA I/O ERROR
A39F8A49 1128134005 T S syserrlg ERROR LOGGING BUFFER OVERFLOW
8527F6F4 1128134005 P S SYSVMM NO PAGING SPACE AVAILABLE
(2)要显示具有特定错误 ID 的所有错误,可以运行以下命令:
# errpt -j 8527F6F4
IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION
8527F6F4 1128134005 P S SYSVMM NO PAGING SPACE AVAILABLE
(3)要显示特定时间段内记录的所有错误,可以运行以下命令:
# errpt -s 1122164405 -e 1123100405
IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION
2BFA76F6 1123092705 T S SYSPROC SYSTEM SHUTDOWN BY USER
A6DF45AA 1122183705 I O RMCdaemon The daemon is started.
9DBCFDEE 1122164405 T O errdemon ERROR LOGGING TURNED ON
#
|
2.1.5 errclear 命令
errclear 命令删除错误日志中的条目。例如:
(1)要删除错误日志中的所有条目,可以输入以下命令:
# errclear 0
(2)要删除错误日志中分类为软件错误的所有条目,可以输入以下命令:
# errclear -d S 0
2.1.6 errlogger 命令
errlogger 命令允许您将操作员消息记录到系统错误日志中。这些消息最长可达 1024 字节。
下面的示例演示了 errlogger 命令的用法及其输出:
# errlogger "This is a test of the errlogger command"
# errpt
IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION
AA8AB241 1129134705 T O OPERATOR OPERATOR NOTIFICATION
F89FB899 1128150005 P O dumpcheck The copy directory is too small.
A6DF45AA 1127123605 I O RMCdaemon The daemon is started.
9DBCFDEE 1127123605 T O errdemon ERROR LOGGING TURNED ON
A6DF45AA 1127121105 I O RMCdaemon The daemon is started.
|
要显示前一示例中生成的操作员通知(id 为 AA8AB241),可以输入以下命令:
# errpt -a -j AA8AB241
-------------------------------------------
LABEL:OPMSG
IDENTIFIER:AA8AB241
Date/Time:Tue Nov 29 13:47:43 CST 2005
Sequence Number: 24
Machine Id:00C478DE4C00
Node Id:server2
Class:O
Type:TEMP
Resource Name:OPERATOR
Description
OPERATOR NOTIFICATION
User Causes
User Causes
ERRLOGGER COMMAND
Recommended Actions
REVIEW DETAILED DATA
Detail Data
MESSAGE FROM ERRLOGGER COMMAND
This is a test of the errlogger command
2.2 从系统转储中提取错误记录
errdead 命令从系统转储中提取错误记录,其中系统转储包含由 /dev/error 文件维护的内部缓冲区。errdead 命令从转储文件中提取错误记录,并将那些错误记录直接添加到错误日志。
注意:在运行 errdead 命令时,一定不能运行错误日志守护进程。
例如,要从驻留在 /dev/hd7 文件中的转储映像中捕获错误日志信息,可以输入以下命令:
# /usr/lib/errdead /dev/hd7
|
如果在发生转储时 errdemon 守护进程没有运行,则错误日志记录信息将在转储映像中。
2.2.1 将 syslog 消息重定向到错误日志
有些应用程序使用 syslog 来记录错误和其他事件。要在单个报告中列出错误日志消息和 syslog 消息,可以将 syslog 消息重定向到错误日志。这可以通过在 /etc/syslog.conf 配置文件中将 errlog 指定为目标来实现。
2.2.2 用于操作错误消息的其他命令
还存在其他一些错误命令,这些命令不是用于确定系统上的错误,而是用于创建自定义的错误消息,并将它们安置在系统的错误日志消息目录上:
errinstall 将消息安置在错误日志记录消息集中。
errupdate 更新错误记录模板存储库。
errmsg 将消息添加到错误日志消息目录。
errupdate 更新错误记录模板存储库。
ras_logger 提供一种从命令行记录任何错误的方法。可将其用于测试新创建的错误模板,并提供一种从 Shell 脚本中记录错误的方法。
三. 系统日志配置
为了记录系统消息,AIX 5L 使用了 syslogd。syslogd 守护进程读取一个数据报套接字,并将每个消息行发送到由 /etc/syslog.conf 配置文件描述的目标。 syslogd 守护进程在被激活时和收到挂起信号时读取该配置文件。
syslogd 守护进程创建 /etc/syslog.pid 文件。此文件包含单个行,其中带有 syslogd 守护进程的命令进程 ID。此文件用于结束或重新配置 syslogd 守护进程。
发送到 syslogd 守护进程的终止信号将结束该守护进程。syslogd 守护进程记录结束信号信息并立即终止。
每个消息为一行。消息可以包含优先级代码,此代码由位于行首的尖括号 (< >) 中包含的数字来标记。长度超过 900 字节的消息可以截断。
/usr/include/sys/syslog.h 包含文件定义了配置文件使用的功能和优先级代码。本地编写的应用程序使用 syslog.h 文件中包含的定义,从而通过 syslogd 守护进程记录消息。
syslogd 命令的一般语法如下所示:
syslogd [ -d ] [ -s ] [ -f ConfigurationFile ] [ -m MarkInterval ] [-r]
syslogd 守护进程的常用标志
标志 | 描述 |
-d | 打开调试。 |
-f Config File | 指定替代的配置文件。 |
-m MarkInterval | 指定标记命令消息之间相隔的分钟数。如果不使用此标志,则标记命令将每隔 20 分钟发送一条优先级为 LOG_INFO 的消息。包含一个 *(星号)的选择器字段将禁用此功能,此选择器字段将选择所有其他功能。 |
-s | 指定为本地系统上生成的所有转发 syslogd 消息转发一条缩短的消息到另一个系统(如果作此配置的话)。 |
-r | 禁止对从远程主机收到的消息进行日志记录。 |
syslogd 守护进程使用一个配置文件,以根据消息的优先级和生成消息的功能来确定将系统消息发送到何处。缺省情况下,syslogd 读取缺省配置文件 /etc/syslog.conf,但是如果指定了 –f 标志,则可以指定替代的配置文件。
3.1 syslogd 配置文件
/etc/syslog.conf 文件控制 syslogd 守护进程的行为。例如,syslogd 使用 /etc/syslog.conf 文件确定将错误消息发送到何处,或如何对不同的系统事件作出反应。下面是缺省的 /etc/syslog.conf 文件的一部分:
# @(#)34 1.11 src/bos/etc/syslog/syslog.conf, cmdnet, bos530 4/27/04 14: 47:53
# IBM_PROLOG_BEGIN_TAG
# This is an automatically generated prolog.
# bos530 src/bos/etc/syslog/syslog.conf 1.11
# Licensed Materials - Property of IBM
# (C) COPYRIGHT International Business Machines Corp. 1988,1989
# All Rights Reserved
# US Government Users Restricted Rights - Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
# IBM_PROLOG_END_TAG
......
# /etc/syslog.conf - control output of syslogd
# Each line must consist of two parts:-
#
# 1) A selector to determine the message priorities to which the
# line applies
# 2) An action.
# Each line can contain an optional part:-
# 3) Rotation.
# The fields must be separated by one or more tabs or spaces.
# format:
# <msg_src_list> <destination> [rotate [size <size> k|m]
[files <files>] [time <time> h|d|w|m|y] [compress][archive <archive>]]
# where <msg_src_list> is a semicolon separated list of <facility>.<priority>
# where:
# <facility> is:
# * - all (except mark)
# mark - time marks
......
# example:
# "mail messages, at debug or higher, go to Log file.File must exist."
# "all facilities, at debug and higher, go to console"
# "all facilities, at crit or higher, go to all users"
# mail.debug /usr/spool/mqueue/syslog
# *.debug /dev/console
# *.crit *
# *.debug /tmp/syslog.out rotate size 100k files 4
# *.crit /tmp/syslog.out rotate time 1d
|
除了包含 syslogd 守护进程设置的 /etc/syslog.conf 文件外,/etc/syslog.pid 文件还包含正在运行的 syslogd 守护进程的进程 ID。
3.2 配置文件的格式
本部分描述 /etc/syslog.conf 文件的格式是什么,以及如何解释此文件中的不同条目。syslogd 守护进程配置文件中的行包含一个选择器字段和一个操作字段,两者之间由一个或多个制表符分隔。
选择器字段指定一个功能和一个优先级。功能名称之间用一个逗号 (,) 分隔,选择器的功能和优先级部分之间用一个句点 (.) 分隔,同一选择器字段中的多个条目之间用一个分号 (;) 分隔。要选择所有功能,可以使用一个星号 (*)。
操作字段确定要接收消息的目标(文件、主机或用户)。如果将消息发送到远程主机,远程系统将按照自己的配置文件中的指示来处理消息。要在用户的终端上显示消息,目标字段必须包含一个有效的已登录系统用户的名称。
功能:
下表列出了 /etc/syslog.conf 文件中使用的部分功能。可以在选择器字段中使用这些系统功能名称。
功能 | 描述 |
kern | 内核 |
user | 用户级别 |
邮件子系统 | |
daemon | 系统守护进程 |
auth | 安全性或授权 |
syslog | syslogd 守护进程 |
lpr | 行式打印机子系统 |
news | 新闻子系统 |
uucp | uucp 子系统 |
* | 所有功能 |
优先级
下表列出了 /etc/syslog.conf 文件中使用的优先级。可以在选择器字段中使用这些消息优先级。指定优先级和所有更高优先级的消息均按指示进行发送。
优先级 | 描述 |
emerg | 指定紧急消息 (LOG_EMERG)。这些消息不分发给所有用户。可以将 LOG_EMERG 优先级的消息记录到单独的文件中以便检查。 |
alert | 指定重要消息 (LOG_ALERT),例如严重硬件错误。这些消息将分发给所有用户。 |
crit | 指定未分类为错误的关键消息 (LOG_CRIT),例如不适当的登录尝试。LOG_CRIT 和更高优先级的消息将发送到系统控制台。 |
err | 指定表示错误条件的消息 (LOG_ERR),例如不成功的磁盘写入。 |
warning | 指定表示异常但可恢复的条件的消息 (LOG_WARNING)。 |
notice | 指定重要的信息性消息 (LOG_NOTICE)。没有指定优先级的消息将映射为此优先级。这些消息比信息性消息更重要,但不如警告。 |
info | 指定信息性消息 (LOG_INFO)。这些消息可以丢弃,但是在分析系统时很有用。 |
debug | 指定调试消息 (LOG_DEBUG)。这些消息可以丢弃。 |
none | 排除选定的功能。仅当在同一选择器字段中的前面有一个带 *(星号)的条目时,此优先级才有用。 |
目标
下表列出了 /etc/syslog.conf 文件中使用的一些目标。您可以在操作字段中使用这些消息目标。
目标 | 描述 |
File Name | 以追加模式打开的文件的完整路径名称。 |
@Host | 主机名称,前缀一个 @ 字符。 |
User[, User][...] | 用户名。 |
* | 所有用户。 |
3.3 使用系统日志
要自定义 /etc/syslog.conf 文件以便满足所需的条件,应该通过编辑 /etc/syslog.conf 文件来更新系统日志。在编辑 /etc/syslog.conf 文件并向其添加自己的行以后,您需要重新启动 syslogd 守护进程。这可以通过运行以下命令来完成:
1. 检查以确定 syslogd 守护进程的进程 ID 是什么。在此例中,该进程 ID 是 17228:
# ps -ef | grep syslogd
root 217228 114906 0 Nov 16 - 0:00 /usr/sbin/syslogd
root 430306 290870 0 14:18:11 pts/0 0:00 grep syslogd
|
2. 使用 stopsrc 命令终止 syslogd 守护进程,如下所示:
# stopsrc -s syslogd
0513-044 The syslogd Subsystem was requested to stop.
|
3. 检查 syslogd 守护进程是否已成功终止:
# ps -ef | grep syslogd
root 364610 290870 0 14:20:22 pts/0 0:00 grep syslogd
4. 使用 startsrc 命令重新启动 syslogd 守护进程:
# startsrc -s syslogd
0513-059 The syslogd Subsystem has been started.Subsystem PID is 471258.
|
下面是 /etc/syslog.conf 文件用法的几个示例:
(1)要将调试级或以上的所有邮件功能消息记录到文件 /tmp/mailsyslog,可以输入以下命令:
mail.debug /tmp/mailsyslog
其中:
mail 是功能。
debug 是优先级。
/tmp/mailsyslog 是目标。
(2)要将除来自邮件功能以外的所有系统消息发送到名为 rigil 的主机,可以输入以下命令:
*.debug;mail.none @rigil
其中:
* 和 mail 是功能。
debug 和 none 是优先级。
@rigil 是目标。
(3)要将来自所有功能的 emerg 优先级的消息和来自邮件及守护进程的 crit 及以上优先级的消息发送到用户 nick 和 jam,可以输入以下命令:
*.emerg;mail,daemon.crit nick, jam
其中:
*、mail 和 daemon 是功能。
emerg 和 crit 是优先级。
nick 和 jam 是目标。
(4)要将所有邮件功能消息发送到所有用户的终端屏幕,可以输入以下命令:
mail.debug *
其中:
mail 是功能。
debug 是优先级。
* 是目标。
四. 使用 /etc/tunables 文件进行优化
/etc/tunables 目录集中了可优化文件。可优化文件包含可优化的参数,这些参数打包在一个或多个称为“节”(stanzas) 的部分中。
一个节以一个包含节名称后面跟着一个冒号 (:) 的行开始。没有用于表示某个节结束的标记。它一直延续到另一个节开始。每个节包含一组参数/值对,每行包含一个参数/值对。值由双引号 (") 括起,一个等于号 (=) 将其与参数名称格式值分隔开。参数/值对必须属于某个节;它在节之外没有任何意义。带数字符号 (#) 的所有内容都视为注释并将其忽略。
可优化文件使用以下语法:
schedo:
%usDelta = "100" # DEFAULT VALUE
affinity_lim = "7" # DEFAULT VALUE
allowMCMmigrate = "0" # DEFAULT VALUE
big_tick_size = "1" # DEFAULT VALUE
no:
arpqsize = "12" # DEFAULT VALUE
arpt_killc = "20" # DEFAULT VALUE
arptab_bsiz = "7" # DEFAULT VALUE
|
可优化文件当前支持七个不同的节:每个节分别用于每个可优化命令(schedo 、 vmo 、 ioo 、 raso 、 no 和 nfso),外加一个特殊 info 节。
/etc/tunables 下面的三个文件具有特殊的名称和意义:
(1)nextboot 此文件在启动时自动进行应用。bosboot 命令也从此文件获取 bosboot 类型的可优化参数的值。其中包含已成为持久性值的所有可优化命令参数设置。
(2)lastboot 此文件在启动时自动生成。其中包含完整的可优化参数集,以及它们在上次启动后的值。缺省值用 # DEFAULT VALUE 进行标记。
(3)lastboot.log 这应该是 /etc/tunables 中唯一不属于这里描述的节格式的文件。它在启动时自动生成,并包含 lastboot 文件创建日志记录。所有参数更改都记录在此文件中,其中还记录了失败的更改。
六个命令节包含由对应的命令(有关完整的参数列表,请参见手册页)管理的可优化参数。
(1)schedo 管理 CPU 调度程序可优化参数。
(2)vmo 管理虚拟内存管理器可优化参数。
(3)ioo 管理输入/输出可优化参数。
(4)raso 管理可靠性、可用性和服务能力参数。
(5)no 管理网络优化参数。
(6)nfso 管理网络文件系统 (NFS) 优化参数。
(7)vmo 命令用于取代早期 AIX 版本中使用的 vmtune 命令。
值可以是一个数值或字面单词 DEFAULT,此值被解释为该可优化参数的缺省值;或者是 STATIC,表示一个从不恢复的 Static 变量。有些节可能包含不存在的参数的值(在可优化文件是从运行旧版本 AIX 5L 的系统复制而来并且一个或多个可优化参数不再存在的情况下)。当您使用 tunrestore 或 tuncheck 命令时,将会显示有关此类参数的警告。
info 节用于存储有关可优化文件的用途和用于验证它的 AIX 5L 级别的信息。此节中可以接受任何参数;但是,有些字段具有特殊的含义。
下面的例子演示了一个示例 info 节:
info:
Logfile_checksum = "3444306214"
Description = "Full set of tunable parameters after last boot"
AIX_level = "5.3.0.30"
Kernel_type = "MP"
Last_validation = "2005-11-11 11:57:53 CST (current, reboot)"
|
下表解释了该节中的不同字段
参数 | 值 |
描述 | 一个描述该可优化文件的字符串。SMIT 在文件选择框中显示此字段。 |
AIX_level | AIX 5L 版本。此字段由 tunsave 和 tuncheck 自动更新(仅在成功时)。 |
Kernel_type | "MP":多处理器内核。 |
Last_validation | 次验证此文件的日期以及验证类型: |
Logfile_checksum | 与此可优化文件匹配的 lastboot.log 文件的校验和。此字段仅存在于 lastboot 文件中。 |
info 节的描述
AIX 5L 提供的用于处理可优化文件的命令包括:
(1)tunsave 将当前可优化参数值保存到某个文件(备份)。
(2)tunrestore 从某个文件恢复可优化参数值。
(3)tuncheck 验证某个可优化文件。
(4)tunchange 更新某个文件中的一个或多个可优化节。
(5)tundefault 将所有可优化参数重设为其缺省值。
五. 使用可靠的可伸缩集群技术(Reliable Scalable Cluster Technology,RSCT)控制资源使用
RSCT 是一组软件组件,它们集合起来为 AIX 5L 和 Linux 提供一个全面的集群环境。RSCT 是多种 IBM 产品使用的基础设施,用于提供具有改进的系统可用性、可伸缩性和易用性的集群。还可以在独立系统上使用 RSCT。
基本的 RSCT 组件包括:
(1)资源监视和控制(Resource Monitoring and Control,RMC)子系统。这是 RSCT 的可伸缩、可靠的中枢。它在单台计算机或集群的每个节点(操作系统映像)上运行,并提供单个系统或节点集群资源的公共抽象。可以将 RMC 用于单个系统监视,或者用于监视集群中的节点。但是在集群中,RMC 提供对整个集群中的子系统和资源的全局访问,从而为集群提供单一的监视/管理基础设施。
(2)RSCT 核心资源管理器。资源管理器是资源(为其他某些组件提供服务的硬件或软件实体)和 RMC 之间的一个软件层。资源管理器将 RMC 中的编程抽象映射到实际的资源调用和命令中。
(3)RSCT 集群安全服务,此服务提供允许 RSCT 组件对其他方的实体进行身份验证的安全基础设施。
(4)拓扑服务子系统,此子系统在某些集群配置上提供节点/网络故障检测。
(5)组服务子系统,此子系统在某些集群配置上提供跨节点/进程协调。
所有相同类型的资源都定义到各个资源类中。资源类设置了该资源类的实例所能具有的公共特征,而资源本身则包含特定的特别特征值。
要显示计算机上可用的类,可以发出 lsrsrc 命令:
# lsrsrc
class_name
"IBM.Association"
"IBM.ATMDevice"
"IBM.AuditLog"
"IBM.AuditLogTemplate"
"IBM.Condition"
"IBM.EthernetDevice"
"IBM.EventResponse"
"IBM.FDDIDevice"
"IBM.Host"
"IBM.FileSystem"
"IBM.PagingDevice"
"IBM.PhysicalVolume"
"IBM.Processor"
"IBM.Program"
"IBM.TokenRingDevice"
"IBM.Sensor"
"IBM.Sfp"
"IBM.ServiceEvent"
"IBM.ManagementServer"
"IBM.NetworkInterface"
"IBM.HostPublic"
"IBM.DRM"
"IBM.WLM"
"IBM.LPAR"
"IBM.LPCommands"
|
六. 工作负载管理器
工作负载管理器(Workload Manager,WLM)允许系统管理员在工作之间划分资源。WLM 是 BOS 的一部分,它提供了用户社区与差异很大的系统行为之间的隔离。这可以防止具有某些特征(例如交互式或低 CPU 使用率的作业)的工作负载由于具有其他特征(例如批处理或高内存使用率的作业)的工作负载而导致实际的资源短缺。CPU 时间、内存和 I/O 带宽单独进行管理;因此可以管理不同风格的应用程序。
AIX 5L WLM 交付了赋予管理员更多控制权的基本能力,允许他们控制调度程序、虚拟内存管理器(Virtual Memory Manager,VMM)和设备驱动程序调用如何将 CPU、物理内存和 I/O 带宽分配给基于类的用户、组、应用程序路径、进程类型或应用程序标记。它允许指定类的层次结构、要按其特征自动分配到类的进程,以及进程到类的手动分配。类可以是超类或子类。当某个类中没有作业或者某个类不使用为它分配的所有资源时,WLM 将进行自我调整。资源将自动分配到其他类,以匹配系统管理员的策略。
注意:需要具备现有系统进程和性能的广泛知识才能高效地使用 WLM 。如果系统管理员为 WLM 配置极端或不准确的值,性能将会显著降低。
WLM 实现示例
七. 分区负载管理器
AIX 5L 的分区负载管理器(Partition Load Manager,PLM)旨在自动化单个中央电子柜(central electronics complex,CEC)中的逻辑分区之间的内存和 CPU 资源的管理。为了改进资源利用,PLM 基于分区负载和优先级自动实现这些资源在分区之间的迁移;具有较高需求的分区将收到具有较低需求的分区捐献或减少的资源。一个用户定义的策略将控制如何移动资源。PLM 不会与 HMC 中的分区定义相抵触。相反,它在 POWER Hypervisor 提供的微分区功能之上增添了附加的灵活性。
有关分区在网络、磁盘和 CPU 资源隔离方面的优点的讨论,其他出版物已作了很好的阐述。LPAR 是服务器合并的主要工具。但是您如何管理它们呢?PLM 是一个解决办法。
PLM 是“高级 POWER 虚拟化”功能的一部分。它同时在运行 AIX 5L Version 5.3 或 AIX 5L Version 5.2 (ML4) 或更高版本的 IBM Systems p5 服务器的专用和共享处理器分区上受到支持。
7.1 PLM 操作模式
可以通过两种模式启动 PLM:
(1)监视模式
(2)管理模式
在监视模式下,PLM 报告提供许多有关所管理分区中的资源使用情况的统计信息。
在管理模式下,PLM 将启动动态重配置操作,以便按照已定义的策略使系统资源与分区工作负载匹配。
7.1.1 监视模式
用于监视分区状态的 PLM 命令是 xlpstat。此命令的语法是:
xlpstat [ -r ] { -p | -f } filename [ interval ] [ count ]
-p 开关指定将从启动 PLM 服务器时使用的给定策略文件中检索所管理分区的列表。或者,您可以在文本文件中提供所管理分区的列表,每行包含一个分区,并使用 –f 标志指定此文件。xlpstat 命令将查询所列分区的状态。此命令的输出并不区分由 PLM 积极管理的分区和未由 PLM 管理的分区。
-r 开关以原始模式打印输出,此模式更容易由脚本语言进行分析:
# xlpstat -p 2_groups
CPU MEM
------------------------ ------------------
STAT TYP CUR PCT LOAD CUR PCT PGSTL HOST
group2:
up S 0.5 4.00 0.10 512 75.17 0 plmserver
up S 0.50 85.45 0.44 512 99.17 129 vio_client2
group1:
up D 1.00 95.09 0.19 512 99.23 129 app_server
up D 1.00 0.39 0.09 512 74.73 0 db_server
|
此屏幕在单独的行上显示了每个所管理分区的状态(将各分区分组到 PLM 组中)。在上面的示例中,存在两个组。
(1)STAT 列指示该分区是启动还是停止。在上面的示例中,所有分区都是启动的。
(2)TYP 列显示该分区是使用共享处理器 (S) 还是专用处理器 (D),或者 xlpstat 命令是否无法查询该分区并且其状态未知(这显示为 U,通常是存在连接问题的迹象)。group 2 中的分区是共享的,而 group 1 中的分区则是专用的。
接下来的六列划分为两组,每组三列,一组针对 CPU 使用,另一组针对内存使用。CUR 列给出了 CPU 和内存的当前授权值,PCT 列给出了百分比利用率。(3)LOAD 列指示 PLM 测量的 CPU 负载,PGSTL 列指示用页替换率测量的内存负载。
(4)HOST 列给出了所管理分区的名称。
7.1.2 管理模式
PLM 使用客户机/服务器模型监视和管理分区资源,如图 2 所示。客户机充当每个所管理分区上的代理。PLM 服务器配置每个代理(客户机),并设定应该触发服务器通知的阈值。代理监视分区的资源使用,并在每次经过(利用不足或过度利用)PLM 设定的阈值时通知 PLM 服务器。基于用户定义的资源管理策略,PLM 服务器通过 HMC 调用动态重配置操作(dynamic reconfiguration,DR),以将资源从后备池移动到某个分区,或在分区之间移动资源。
PLM 允许实现分区组。各个组中的资源独立进行管理。图 2 中显示了两个分区组,一个针对生产分区,另一个针对测试和开发。
注意:下面是有关 PLM 服务器管理的要点:
(1)PLM 服务器可以驻留在与所管理分区相同的服务器上的某个分区中,或者驻留在另一台计算机上。当 PLM 服务器在某个分区中运行时,它能够管理自己的分区。
(2)可以在单个 AIX 5L 系统上运行多个 PLM 服务器。
(3)某台给定服务器上的不同 PLM 组可以由不同的 PLM 服务器进行管理。
(4)一个分区至多只能有一个 PLM 管理器。
(5)并不要求对某个系统中的所有分区都进行管理。
(6)一个 PLM 服务器只能管理一个所管理的 CEC 中的分区。
(7)同一个 PLM 分区组中不能同时有共享处理器和专用处理器分区。
(8)资源被约束到某个组:一个 PLM 组中的分区决不会从另一个组中的另一个分区获得资源。
(9)一个分区组中至少存在两个活动分区。
由于每个分区是在本地进行监视的,并且仅当发生事件时代理才会与 PLM 服务器通信,所以 PLM 仅消耗微不足道的系统和网络资源量。
7.2 资源管理策略
资源管理策略在一个策略文件中定义所管理的分区、各分区的授权值和阈值,它也将分区组织到各个组中。策略文件定义要分配给分区的有保证和可变的 CPU 和内存资源,并在 PLM 服务器启动时加载。PLM 服务器是一个应用程序,它在某个逻辑分区中或在另一个系统上的任何 AIX 5L 系统上运行,并且是跨分区负载管理的聚焦点。有关 PLM 策略以及如何安装和配置 PLM 的详细讨论,请参见 Advanced POWER Virtualization on IBM System p5,SG24-7940。
由 PLM 管理的每个节点都必须在策略文件中进行定义,同时还要定义几个属性的值,例如:
(1)可选的最大、最小和保证资源值
(2)分区的相对优先级或权重
(3)用于资源事件通知的上限或下限阈值
PLM 使用资源监视和控制(Resource Monitoring and Control,RMC)子系统进行网络通信。该子系统还用于与 HMC 通信,以收集系统信息和执行 PLM 配置 SSH 连接所需要的命令。PLM 通过 RMC 从资源管理代理处获得分区负载数据,并从 HMC 处获得 LPAR 配置。
如果某个分区拥有相对于需求的多余资源,或者需要附加的处理器或内存,则 PLM 服务器将通过 SSL 向 HMC 发送重配置命令,从而将资源从一个 LPAR 移动到另一个 LPAR。
图 3 显示了不同的分区状态和负载阈值。对于每个资源,都存在一个上限和下限负载阈值。每当越过某个阈值,PLM 就会接收到一个 RMC 事件。当资源负载超过上限阈值时,PLM 认为该分区需要额外的资源;该分区称为“请求者”。当资源负载低于下限阈值时,该分区成为潜在的捐献者。通常,仅当另一个分区进入针对同一资源的请求者状态时,才会从捐赠者处移出资源。当资源负载介于两个阈值之间时,PLM 认为可用的资源是足够的。
加载后的策略文件是静态的;分区的优先级不会在高优先级的工作到达时更改。分区的优先级只能通过加载新的策略来更改。可以动态更改策略文件而无需停止 PLM。
7.3 资源分配
策略定义的一部分是组中每个分区的相对优先级。这是使用与 AIX 5L 工作负载管理器(Workload Manager,WLM)中使用的类似共享机制来实现的。分配给某个分区的份额数越大,其优先级越高。为了防止某些分区资源短缺,PLM 使用其当前资源量调整分区优先级。下面将描述这种机制。
当 PLM 接到某个分区进入请求者状态的通知时,它将按如下顺序查找资源:
(1)空闲的未分配资源池。
(2)资源捐献者。
(3)具有所请求资源的较少份额、但是拥有的资源超过其可配置保证值所指定资源的分区。
如果空闲池中有资源,则将这些资源提供给请求者。如果空闲池中没有资源,则检查资源捐献者列表。如果存在资源捐献者,则将资源从捐献者移动到请求者。所移动的资源量是两个分区的最小增量值,或者是按照策略的规定将赋予它们相等优先级的资源量。如果不存在资源捐献者,则检查其资源超过保证值的分区列表。
确定哪个节点更应该获得资源是通过比较来实现的,即根据某个分区的份额数(权重)所指定的优先级,比较该分区相对于其优先级应该拥有多少资源。PLM 从具有多余资源的分区列表计算一个分区排序,包括请求分区。分区的优先级被定义为以下比率:
此比率的较低值表示较高的优先级;具有较低优先级值的分区可以从具有较高值的分区夺取资源。
图 4 显示了针对三个 Capped 分区中的 CPU 资源的该过程概况。负载不足的分区 3 是一个请求者。不存在空闲池中的空闲资源或可用的捐献者分区。PLM 寻找具有多余资源(超过其保证值的资源)的分区。组中的另外两个分区都拥有多余资源。分区 1 在所有分区中具有最高的多余/份额比率,资源将从分区 1 移动到分区 3。
如果对某个资源的请求得到考虑,则将该请求排入队列并在资源变得可用时重新进行评估。
7.4 资源分配约束
在指定 PLM 策略时必须考虑许多限制。
(1)资源的最小、保证和最大值必须满足以下关系:最小值 <= 保证值 <= 最大值。
(2)如果最小、保证和最大值全都具有相同的值,或者将组最大值设置为 0,则 PLM 将不管理资源。
(3)与优先级无关,PLM 将不允许分区的每项资源低于其最小值或高于其最大值限制。
(4)PLM 最大值和最小值的范围应该是 HMC 上设置的最大值和最小值范围的子集;否则,则使用 PLM 和 HMC 值的交集。
(5)如果不为 PLM 最大值和最小值指定任何值,则将其缺省设置为 HMC 上的值。
7.5 内存管理
PLM 通过在分区之间移动逻辑内存块(logical memory block,LMB)来管理内存。LMB 的大小取决于 CEC 中安装的内存数量。它介于 16 和 256 MB 不等。LMB 的大小可以用 HMC 上的高级系统管理接口(Advanced System Management Interface,ASMI)进行修改。
为了确定何时存在内存需求,PLM 使用了两个指标:
(1)利用率百分比(使用中的内存与所配置的内存量之比)。
(2)页面替换率。
AIX 5L 将利用对其可用的所有内存。除非需要从磁盘引入其他页面,否则它不会将页面移出内存。这意味着即使存在多余的内存,AIX 5L 也会使用该内存,并且即使没有任何应用程序使用该内存,AIX 5L 工具也会将其报告为“已使用”。因此,分区很少成为捐献者。
7.6 处理器管理
对于专用处理器分区,PLM 将物理处理器一次一个地从没有利用它们的分区或具有较高多余权重的分区,移动到需求它们的分区。这使得专用处理器分区能够更好地利用其资源,例如,从日末事务平稳过渡到夜间批处理作业。
对于共享处理器分区,PLM 管理有权使用的容量和虚拟处理器(virtual processor,VP)的数量。当某个分区请求更多处理器容量时,如果有附加的处理器容量可用,则 PLM 将增加请求分区有权使用的容量。PLM 可以增加虚拟处理器的数量,以提高 capped 和 uncapped 分区在高负载条件下使用更多处理器资源的潜力。相反,PLM 还将在低负载条件下减少有权使用的容量和虚拟处理器数量,以更高效地利用基础物理处理器。
注意: AIX 5L Version 5.3 ML3 中引入的虚拟处理器折叠优化 (folding optimization) 致使 PLM 执行的虚拟处理器计数管理在大多数情况下变得不必要,但是删除虚拟处理器要比 VP 折叠更为高效,因此在某些情况下, PLM 执行的虚拟处理器管理也许是适宜的。
参考:
IBM AIX V5.3 系统管理(Test 222)认证指南系列,第 4 部分:监视和性能优化(上)
http://www.ibm.com/developerworks/cn/aix/redbooks/test222/monitor-tuning/test222-monitor1.html