AIX 性能调整及维护案例

oyx319 贡献于2015-01-06

作者 微软用户  创建于2009-01-13 02:47:00   修改者User  修改于2010-11-18 13:51:00字数161244

文档摘要: AIX 5L 内存性能优化之AIX Version 5.3 中内存的概述以及内存参数的优化 AIX 5L 内存性能优化之AIX Version 5.3 中内存的概述以及内存参数的优化,详细介绍了AIX 5L系统内存管理特性和优化技巧!这部分内容提供了与 AIX 有关的内存方面的概述。我将介绍 AIX 如何使用虚拟内存来寻址比系统中物理内存更大的内存。我还将说明 VMM 的工作方式以及它如何处理各种请求。
关键词:

 AIX 性能调整及维护案例 2009-1-13 目录 1 系统优化篇 3 1.1 AIX 5L 内存性能优化之AIX Version 5.3 中内存的概述以及内存参数的优化 3 1.2 AIX 5L 内存性能优化之使用 ps、sar、svmon 和 vmstat 监视内存的使用 7 1.3 AIX 5L 内存性能优化之配置和管理交换空间,优化(VMM) 12 1.4 AIX 5.3主机性能评估-Memory性能评估 19 1.5 AIX 5L 磁盘性能优化 23 1.6 AIX 5L 磁盘性能优化之iostat、lvmstat、lslv、lspv 和 lsvg 33 1.7 AIX 5.3主机性能评估-磁盘的I/O性能评估 43 1.8 AIX 5.3主机性能评估-CPU性能评估 57 1.9 AIX 5.3主机性能评估-NETWORK性能评估 66 1.10 AIX网络诊断及解决现场实例 72 1.11 AIX 5.3主机性能评估-topas的使用说明 75 1.12 AIX 5.3主机性能评估-结合案例分析 78 1.13 AIX 5.3主机性能评估-主机日常检查脚本 89 2 系统管理篇 98 2.1 AIX管理经验谈 98 2.2 IBM AIX服务器巡检流程 99 2.3 超经典的AIX系统管理手册之一(AIX系统的安装) 99 2.4 超经典的AIX系统管理手册之二(AIX操作系统基本命令) 103 2.5 超经典的AIX系统管理手册之三(vi编辑器的使用) 116 2.6 超经典的AIX系统管理手册之四(AIX存储管理) 122 2.7 超经典的AIX系统管理手册之五(RS6000 更换硬盘的过程) 134 2.8 超经典的AIX系统管理手册之六(HACMP安装配置) 137 2.9 超经典的AIX系统管理手册之七(模拟硬盘更换) 147 2.10 AIX 常用命令汇总 151 3 常见问题篇 164 3.1 如何禁止终端上的中断键(CTRL+C)? 165 3.2 如何在shell中不回显(echo)字符? 165 3.3 如何在某个目录及其所属子目录的所有文件中查找字符串? 165 3.4 如何对/etc/inittab文件中的一行进行注释? 165 3.5 如何转换DOS和AIX两种格式的文本文件? 165 3.6 如何设置用户的文件大小限制? 166 3.7 如何按文件大小排序列出一个文件系统下的文件? 166 3.8 AIX中查看用户对系统资源的使用情况 166 3.9 AIX环境如何找到活动最频繁的进程 167 3.10 AIX如何管理Paging Space 167 3.11 如何检查AIX文件系统的病毒? 168 3.12 如何查看操作系统中是否安装了某个补丁程序? 168 3.13 使用命令行安装删除文件包 168 3.14 AIX FAQ手册 168 3.15 怎么样在Aix 5L上安装并启动X windows 180 3.16 AIX下怎样根据端口号查找对应的进程 181 3.17 AIX常用网址 182 4 AIX的系统备份和恢复 182 5 AIX调试工具的介绍与使用详解 183 1 系统优化篇 1.1 AIX 5L 内存性能优化之AIX Version 5.3 中内存的概述以及内存参数的优化 AIX 5L 内存性能优化之AIX Version 5.3 中内存的概述以及内存参数的优化,详细介绍了AIX 5L系统内存管理特性和优化技巧! 1.1.1 引言    作为一名系统管理员,您应该已经对有关内存的基本知识非常熟悉,如物理和虚拟内存之间的区别。您可能还不是很清楚 AIX® 中的虚拟内存管理器 (VMM) 是如何工作的、以及它与性能优化之间的关系如何。而且,在最近几年中,有一些优化命令和参数发生了变化,如果您较长时间没有使用 AIX 了,那么您可能会发现,您从前所熟悉的一些命令,现在甚至根本无法继续使用了。本文详细地介绍了 AIX VMM,以及优化 VMM 所需使用的各种优化命令。我将介绍一些监视工具,您可以使用这些工具来优化您的系统,本文还对一些比较重要的 AIX Version 5.3 内存管理增强功能进行概述。实现这些增强功能,即将其应用到您的系统环境,可以在您的系统中优化内存性能。 尽管您可能会发现,与其他的子系统相比,内存的优化更为困难一些,但是收到的效果往往更加显著。可能还有一些应该在您的系统中进行设置的特定的优化建议,这取决于您所运行的系统的类型。为了帮助证实这些内容,我使用了一个特定的示例,并介绍了进行这些参数设置的一些最佳实践。在某些情况下,动态地优化一个或两个参数,可能会使得您的系统的整体性能完全不同。 无论您需要对哪个子系统进行优化,有一个方面是相同的,即优化系统—您始终应该将其看作一个正在进行的进程。开始对系统进行监视的最佳时间是当您首次将系统应用到产品环境中并且正常运行时,而不是等到用户抱怨系统的性能非常糟糕的时候。如果您不了解系统正常运行时的情况,并以此作为基准,那么您可能永远也无法真正地确定是否出现了问题。而且,一次只应该进行一项更改,并且在进行了更改之后,应该尽快地捕获相关的数据并对其进行分析,以确定这项更改究竟带来了什么不同(如果存在的话)。 内存概述 这部分内容提供了与 AIX 有关的内存方面的概述。我将介绍 AIX 如何使用虚拟内存来寻址比系统中物理内存更大的内存。我还将说明 VMM 的工作方式以及它如何处理各种请求。 任何有关内存和 AIX 的介绍都必须以对 VMM 的描述作为开始。有时候,令 AIX 新手感到困惑的是,VMM 服务如何处理系统中所有的内存请求,而不仅仅是虚拟内存本身。在访问 RAM 时,VMM 需要分配空间,即使是在系统中有足够的物理内存的情况下。它实现了分页空间的预分配过程。使用这种方法,VMM 在帮助管理实际内存方面扮演了重要的角色,而不仅是在虚拟内存方面。下面来说明它的工作原理。在 AIX 中,将所有的虚拟内存段划分为若干个页面。在 AIX 中,每个页面的缺省大小为 4KB。所分配的页面可以位于 RAM 或者分页空间(虚拟内存存储于磁盘上)。VMM 还维护一个称为空闲列表 的对象,该对象定义为未分配的页帧。它们用于处理缺页的情况。通常存在少量未分配页面(您可以自行配置),VMM 可以使用这些页面来腾出空间并为其重新分配页帧。可以使用 VMM 的页面置换算法来选择要重新分配页帧的虚拟内存页面。这种分页算法可以确定对当前位于 RAM 中的哪些虚拟内存页面的页帧进行回收,并放回到空闲列表中。AIX 可以使用所有可用的内存,除了那些配置为未分配并用做空闲列表的内存之外。 需要重申的是,VMM 的目的是管理 RAM 和虚拟页面的分配。由此可以看出,它的目标是帮助最大限度地缩短缺页响应时间,并在可能的情况下减少虚拟内存的使用。很显然,假设要在 RAM 和分页空间之间进行选择,在 RAM 可用的情况下,大多数人都更希望使用物理内存。另外,VMM 还将虚拟内存段划分为两种不同的类别。它们分别是,使用计算内存的工作段和使用文件内存的持久段。了解这两种类别之间的区别是非常重要的,因为这将帮助您实现系统的最优化。 计算内存 当您的进程对计算信息进行处理时,将使用到计算内存。这些工作段是临时的(暂时的),并且当进程终止或者页面被替换时,这些工作段将不复存在。它们没有对应的持久磁盘存储位置。在许多情况下,当一个进程终止时,将释放其物理和分页空间。当可用页面出现较大的峰值时,您可以在监视系统的过程中发现这种情况。在 VMM 中,当空闲物理内存较少时,可以将最近没有使用的程序从 RAM 移出到分页空间,以帮助释放物理内存,从而完成更多的实际工作。 文件内存 与计算内存不同,文件内存使用了持久段,并在磁盘上具有持久存储位置。数据文件或者可执行程序通常都映射为持久段,而不是工作段。数据文件可能与文件系统相关,如 JFS、JFS2 或 NFS。它们一直都位于内存中,直到文件被卸载、页面被替换、或者取消了到文件的链接。在将数据文件复制到 RAM 中之后,VMM 控制何时对这些页面进行覆盖或者将其用于存储其他数据。在可以选择的情况下,大多数人更希望将文件内存调出到磁盘,而不是计算内存。 当进程引用磁盘上的某个页面时,必须将其调入,而这可能会导致再次将其他的页面调出。VMM 常驻内存并在后台运行,尝试替换最近没有使用的页帧,其中使用到前面介绍的页面置换算法。它还可以帮助检测系统颠簸,当可用内存量很低并且不断地调入和调出页面以支持任务的处理时,可能会出现系统颠簸。实际上,VMM 中提供了一种内存负载控制算法,它可以检测系统是否出现颠簸,并尝试去解决这种情况。如果不加以处理,系统颠簸可能会导致系统停滞,因为内核此刻过分地关注于为页面腾出空间,而不是完成任何有实际意义的工作。 优化 让我们研究一些相关的工具,它们允许您对 VMM 进行优化,从而实现系统性能的优化。我提供了一个环境示例,其中使用了某种方法对相关的参数进行优化。我还介绍了一些需要注意的关键参数。 在 AIX 5L™ 之前,您可能曾经使用过 vmtune 命令对您的 VMM 系统进行优化。尽管在 AIX Version 5.2 中提供了 vmo 命令,但 vmtune 命令也可以使用,直到 AIX Version 5.3。在 AIX Version 5.3 中,您不能够再使用 vmtune 这一命令了。尽管有一些根本的变化您需要了解,但是大多数实际参数都是相同的。 让我们来介绍一下 AIX 5L 中页帧方面一项重要的变化。从 POWER4 处理器开始,AIX 可以支持最大 16MB 的页面大小。实际上,POWER5 芯片支持四种虚拟内存页面的大小:4KB、64KB、16MB 和 16GB。通过下面一项简单的 vmo 更改,您就可以对系统进行优化以提供大型的页面,从而对于消耗大量内存的应用程序极大地提高系统性能。性能之所以得到了改进,是因为提高了 Translation Lookaside Buffer (TLB) 的命中率,这是因为 TLB 可以映射到更大的虚拟内存范围。例如 Oracle 数据库,无论是联机事务处理 (OLTP) 或者数据仓库应用程序,都可以从大型页面的使用中获益。这是因为 Oracle 使用了大量的虚拟内存,特别是对于其系统全局区 (SGA)。这里使用的示例是一个运行 AIX Version 5.3 的 p550 LPAR 上的 Oracle 数据库服务器。该系统可用于 OLTP 和数据仓库。 清单 1 中的命令分配了 16777216 字节以提供 128 个大型页面。 清单 1. 分配字节 # vmo -r -o lgpg_size=16777216 lgpg_regions=128 最重要的 vmo 设置是 minperm 和 maxperm。将这些参数设置为适合您的系统的值,以确保对计算内存或者文件内存进行优化。在大多数情况下,您并不希望调出工作段,因为这样做会导致系统进行没有必要的页面调出,并且会降低性能。以前,它的工作方式非常简单:如果您的文件页面 (numperm%) 大于 maxperm%,那么页面置换算法将仅替换文件页面。当它小于 minperm 时,可以替换文件页面和计算页面。如果它的值位于两者之间,那么将仅替换文件页面,除非重分页的文件页面的数目大于计算页面。还有另一种方法,如果您的 numperm 大于 maxperm,您可以开始替换持久的存储。基于这种方法学,早期的方法是调整您的 minperm 和 maxperm 参数,将 maxperm 设置得比较低(例如,<20),而将 minperm 设置为 <=10。您可以使用这种方法来优化您的数据库服务器。 lru_file_repage 参数设置为 0。lru_file_repage 是在带 ML4 的 AIX Version 5.2 和 AIX Version 5.3 的 ML1 中首次引入的。这个参数说明了是否应该考虑 VMM 重分页计数,以及它应该替换何种类型的内存。其缺省设置为 1,所以您需要对它进行更改。当您将这个参数设置为 0 时,它将告诉 VMM,您希望它仅替换文件页面,而不是计算页面。如果您的 numperm 小于 minperm 或者大于 maxperm,这种情况会发生变化,这正是您希望将 maxperm 设置得较高而将 minperm 设置得较低的原因。我们不应该忘记一个事实,对这个值进行优化的主要原因是因为您希望保护计算内存。回到前面的示例,Oracle 使用它自己的缓存,同时使用 AIX 文件缓存,但是却产生了混淆,所以您希望停止它。在这个场景中,如果您打算降低 maxperm,那么您将会停止正在运行的应用程序缓存程序。 清单 2 设置了这些关键的优化参数。 清单 2. 设置优化参数 vmo -p -o minperm%=5 vmo -p -o maxperm%=90 vmo -p -o maxclient%=90 尽管您已经习惯于对这些参数进行更改,但是现在,您只需保持 strict_maxperm 和 strict_maxclient 的缺省数值即可。如果将 strict_maxperm 更改为 1,那么它将会对可用于持久文件缓存的内存量设置一个硬限制。通过将 maxperm 值作为缓存的上限,可以实现这一点。现在,没有必要这样做,因为更改 lru_file_repage 参数是一种更加有效的优化方法,而您并不希望使用 AIX 文件缓存。 还有两个其他的重要参数需要说明,它们是 minfree 和 maxfree。如果空闲列表中的页面数降低到低于 minfree 参数,那么 VMM 开始替换页面(只需添加到空闲列表),这样做并不是很合适。它将继续进行这项操作,直到空闲列表至少包含 maxfree 参数中指定的页面数。 在较早版本的 AIX 中,当缺省 minfree 设置为 120 时,通常您将会看到空闲列表为 120 或者更低,而这将导致进行没有必要的分页,更糟糕的是,会阻塞那些需要空闲帧的线程,因为这个值设置得过低。要解决这个问题,在 AIX Version 5.3 中,将 minfree 和 maxfree 的缺省值分别提高到 960 和 1088。如果您正在运行 AIX Version 5.2 或者更早的版本,我建议进行下面的设置,您可以使用清单 3 中的命令,手动地进行更改。 清单 3. 手动地设置 minfree 和 maxfree 参数 vmo -p -o minfree=960 vmo -p -o maxfree=1088 1.1.2 AIX Version 5.3 内存方面的变化和改进 让我们先研究一下 AIX Version 5.3 中与内存有关的一些最新的变化。适当地使用 AIX Version 5.3 中的内存管理增强功能,可以帮助您高效地对系统进行优化。有关其他的方面,让我们介绍一下页面空间清理、动态的 xmalloc、内存关联和 Watson malloc。 · 页面空间清理:在某些情况下,这种特性允许系统释放分页空间磁盘块,这样一来,您就不需要为给定的工作负载配置相应的分页空间。仅在使用延迟页面空间分配策略时,才能使用这种特性。 · 动态的 xmalloc 调试 (xmdbg):这种特性通过改进内存分配的整体诊断功能,提高了系统的可靠性。。它允许客户改变收集的诊断内存量,而无需重新启动。 · Watson malloc:与内存碎片的缺省实现相比,这种新的 malloc 子系统能够快速处理一些小的请求。与缺省实现 Yorktown 相比,它所消耗的内存非常少。为了方便调试,还添加了一些新的特性,以帮助您修复各种内存分配问题。 · 改进的多种页面大小支持:正如前面在优化部分中所介绍的,现在有四种不同的页面大小可供使用。这些大小分别为: o 4KB o 64KB o 16MB · 16GB · VMM 监视工具:一些监视工具,如 vmstat 和 svmon,都经过了优化,以便支持 POWER5 体系结构的虚拟化功能。现在,它们还支持这部分内容中所介绍的一些改进功能。在本系列文章的第 2 部分中,我将会详细地介绍这些变化,使您能够深入地了解 AIX 的各种内存监视工具,以确定瓶颈、以及分析历史趋势和数据。 · 内存关联:对于 AIX Version 5.3,您无法禁用内存关联,在 AIX Version 5.2 中也同样如此。这样做的目的是,在内存模块中为处理器上产生缺页的进程提供内存分配的功能。在完成了内存分配之后,处理器可以首先访问附加到其自身模块的内存,然后查找其他的模块,这样可以提高性能。要禁用 AIX Version 5.2 上的内存关联支持,您可以使用下面的 vmo 命令: vmo -o memory_affinity=0 您还应该注意,不再需要在 rc.tune 中保存任何可调整的设置。现在,新的方法使用 /etc/tunables,这无疑是一项改进。尽管这个特性是在 AIX Version 5.2 而不是 Version 5.3 中引入的,但是仍然值得在这里进行说明。 1.2 AIX 5L 内存性能优化之使用 ps、sar、svmon 和 vmstat 监视内存的使用 AIX 5L 内存性能优化之使用 ps、sar、svmon 和 vmstat 监视内存的使用,通过命令监控AIX系统的内存使用状况,进而进行系统内存的性能优化,是一个系统管理员对系统优化要做的基本工作! 内存子系统中最重要的优化部分并不涉及到实际的优化工作。在对您的系统进行优化之前,必须弄清楚主机系统的实际运行情况。要做到这一点,AIX? 管理员必须知道应该使用何种工具,以及如何对他或她将要捕获的数据进行分析。再次说明近期发表的一些其他优化文章中所介绍的内容,您在对系统进行正确地优化之前,必须首先监视主机,无论它是在逻辑分区 (LPAR) 运行还是在自己的物理服务器上运行。您可以使用许多命令来捕获和分析数据,所以您需要了解这些命令,以及其中的哪个命令最适合于将要进行的工作。在捕获了相关的数据之后,您需要对结果进行分析。有些问题乍看起来像是一个中央处理单元 (CPU) 的问题,而经过分析之后,可以正确地诊断为内存或 I/O 问题,前提是您使用了合适的工具捕获数据,并且知道如何进行分析工作。仅当正确地完成了这些工作之后,您才可以考虑对系统进行实际的更改。如果医生不了解您的病史和目前的症状,就无法诊治疾病,同样地,您也需要在优化子系统之前对其进行诊断。如果在出现 CPU 或者 I/O 瓶颈的情况下,对内存子系统进行优化,这将是毫无帮助的,甚至可能会影响主机的正常运行。 本文将帮助您了解正确地实施诊断工作的重要性。您将看到,性能优化并不仅仅只是进行实际的优化工作。在您将要学习的工具中,有一些是通用的监视工具,所有版本的 UNIX 都提供了这些工具,另外还有一些工具是专门为 AIX 编写的。有些工具为 AIX Version 5.3 进行了优化,同时还专门为 AIX 5.3 系统开发了一些新的工具。 生成基准数据是非常重要的,这一点无论重申多少次都不为过。不要等到用户开始抱怨糟糕的性能时,才开始监视您的系统。应该在将服务器投入生产环境中后,尽快地捕获其中的数据。如果您做到了这一点,那么您就可以积极主动地进行优化工作,其目标是在用户指出存在的问题之前找到它。如果您不了解系统正常运行时的相关数据,那么就无法确定所查看的数据是否表示存在性能问题。所有这些都是适当的性能优化方法中的一部分,有效地捕获数据,并正确地分析其结果和趋势。让我们来进行仔细地研究。 1.2.1 UNIX 通用的内存监视 在这个部分中,我为在所有 UNIX 分发版都可以使用的一些通用 UNIX 工具提供了概述,包括 ps、sar 和 vmstat。其中的大多数工具都允许您快速地对性能问题进行故障排除,但是它们并不适合用于进行历史趋势研究和分析。 大多数管理员都不善于使用 ps 命令对可能的内存瓶颈进行故障排除。事实上,许多 UNIX 管理员甚至不知道可以使用 ps 帮助确定内存问题的原因。ps 最常用的功能是查看系统中运行的进程(请参见清单 1)。 清单 1. 使用 ps 查看系统中运行的进程 # ps -ef | more UID PID PPID C STIME TTY TIME CMD root 1 0 0 May 03 - 0:03 /etc/init root 11244 19154 0 0:00 root 11384 1 0 May 03 - 0:00 /usr/lib/errdemon root 12434 16618 0 May 03 - 0:29 /usr/opt/ifor/bin/i4llmd -b -n wc clwts -l /var/ifor/llmlg root 13218 16618 0 May 03 - 0:00 /usr/sbin/rsct/bin/IBM.AuditRMd root 13440 1 0 May 03 - 0:00 /usr/ccs/bin/shlap root 13690 13954 0 May 03 - 0:00 dtlogin <:0> -daemon root 13954 1 0 May 03 - 0:00 /usr/dt/bin/dtlogin -daemon 正如您所看到的,上面的示例中并没有提供很详细的信息来帮助您确定内存瓶颈。清单 2 中的命令向您显示了系统中每个活动进程的内存使用情况,并以一种恰当的方式进行了排序。其中按照旧式 Berkeley Software Distribution (BSD) 的方式使用了 ps,不包含短横线。我喜欢这个命令的原因在于,您不需要调用任何 GUI 类型的工具,就可以快速地了解内存方面的情况(请参见清单 2)。 清单 2. 每个活动进程的内存使用情况 . # ps gv | head -n 1; ps gv | egrep -v "RSS" | sort +6b -7 -n -r PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND 15256 - A 64:15 755 2572 2888 xx 2356 316 0.9 0.0 /usr/lpp/ 22752 - A 0:08 261 1960 1980 32768 465 20 0.0 0.0 dtwm 14654 - A 0:00 324 1932 1932 xx 198 0 0.0 0.0 /usr/sbin 20700 - A 0:07 271 1868 1896 32768 95 28 0.0 0.0 /usr/dt/b 20444 - A 0:03 203 1736 1824 32768 551 88 0.0 0.0 dtfile 17602 - A 0:00 274 948 1644 32768 817 696 0.0 0.0 sendmail: 13218 - A 0:00 74 1620 1620 xx 116 0 0.0 0.0 /usr/sbin 让我们先来看看这些信息所表示的含义。 · RSS——每个进程的文本和数据段的 RAM 使用量。PID 为 15256 的进程使用了 2888k。 · %MEM——RSS / Total RAM 的实际用量。监视 %MEM 使用达到百分之四十到七十的进程。 · TRS——文本段的 RAM 使用量,单位为 KB。 · SIZE——为这个进程(文本和数据)分配的分页空间的实际大小。 尽管这个命令提供了许多有价值的信息,但是,除非有一个我非常信任的管理员已经诊断出系统中存在某种类型的内存问题,否则我通常不会启动这个命令。您应该启动后备的命令 vmstat。事实上,您应该使用 vmstat 来确定瓶颈的原因,即使在您尚未确定它是否与内存有关的时候。vmstat 可以报告许多信息,包括内核线程、CPU 活动、虚拟内存、分页、阻塞的 I/O 磁盘、以及相关信息(请参见清单 3)。对我来说,要了解系统的运行情况,这是最快捷且最原始的方法。 清单 3. 使用 vmstat 以确定瓶颈的原因 # vmstat 1 4 System Configuration: lcpu=4 mem=4096MB kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 1 2 136583 127 0 4 57 44 92 0 345 2223 605 30 40 29 1 2 7 136587 118 0 2 230 0 245 0 329 3451 526 20 37 10 33 1 6 136587 157 0 3 67 0 678 0 334 3304 536 25 32 20 23 3 8 136587 111 0 5 61 0 693 0 329 3341 511 19 26 35 20 让我们首先来说明这些列所表示的含义: IXDBA.NET社区论坛 内存数据: · avm——您所使用的活动虚拟内存量(单位为 4k 大小的页面),不包括文件页面。 · fre——内存空闲列表的大小。在大多数情况下,我并不担心这个值什么时候变得很小,因为 AIX 总是会充分地使用内存,并且不会像您希望的那样尽早地释放内存。这个设置由 vmo 命令的 minfree 参数来确定。归根结底,分页的信息更加重要。 · pi——从分页空间调入的页面。 · po——调出到分页空间的页面。 CPU 和 I/O: · r——在您指定的时间间隔内,可运行内核线程的平均数量。 · b——在您指定的时间间隔内,位于虚拟内存等待队列中的内核线程的平均数量。如果 r 不大于 b,通常是 CPU 问题的症状,这可能是由于 I/O 或者内存瓶颈造成的。 · us——用户时间。 · sy——系统时间。 · id——空闲时间。 · wa——等待 I/O。 让我们回到 vmstat 的输出,您的系统究竟出现了什么问题呢?首先是一条免责声明:请不要根据 vmstat 的简单输出结果,向高级管理人员提交详细的分析和建议采取的优化策略。在正确地诊断出系统中存在的问题之前,您必须完成更多的工作。当您碰到产品性能问题,并且需要立即了解系统的运行状况时,您应该使用 vmstat,以便您可以警告其他人出现了什么问题,或者马上采取合适的措施(如果可以)。 现在,再回到输出。出现了什么问题呢?实际上,有好几处问题。初看起来,您可能认为出现了 CPU 瓶颈,因为系统工作得非常辛苦,几乎没有什么空闲时间。如果您仔细地观察,那么将会发现,除了 CPU 忙碌工作之外,还存在其他的问题,例如分页。从 po 可以看出,出现了大量的页面调出,这种情况通常会在实际内存缺乏的时候出现。在输出结果中,甚至空闲列表也降到非常低的程度。其原因可能因为您的空闲列表 (fre) 比 minfree 的阈值(使用 vmo 进行设定的)要低一些。I/O 方面出现了什么问题呢?当您发现阻塞的进程或者等待 I/O 的值 (wa) 很高时,这通常表示出现了实际的 I/O 问题,可能是等待文件访问、或者与因为系统缺少内存而引起的分页相关的 I/O 状况。在这个示例中,看起来是后面这种情况。您碰到了 VMM 问题,而这些问题可能导致了阻塞的进程和等待 I/O 的状况。通过优化内存参数、或者执行动态的 LPAR (DLPAR) 操作并向 LPAR 添加更多的 RAM,您可以解决这个问题。 让我们进行更深入的研究。您可以使用前面介绍过的 ps 命令来尝试确定影响系统的进程。通常在这种情况下,我会运行 sar 以检查该问题是否在使用另一种工具进行分析时依然存在。最好是使用多种工具,以便提供进一步的帮助,从而确保诊断结果是正确的。 尽管与其他工具相比,我并不是很喜欢 sar(因为您需要使用许多的标志,并且在诊断问题之前必须输入许多的命令),但是,它允许您实时地收集数据,并查看所捕获的数据(使用 sadc)。大多数较早的工具都允许您使用不同的命令。自从有了 UNIX,就有了 sar 命令,并且每个人都曾经用过这个命令。使用 -r 标志可以提供一些 VMM 信息(请参见清单 4)。 清单 4. 使用带 -r 标志的 sar 以获得 VMM 的信息 # sar -r 1 5 System Configuration: lcpu=4 mem=4096MB 06:18:05 slots cycle/s fault/s odio/s 06:18:06 1048052 0.00 387.25 0.00 06:18:07 1048052 0.00 112.97 0.00 06:18:08 1048052 0.00 45.00 79.21 06:18:09 1048052 0.00 216.00 0.00 06:18:10 1048052 0.00 8.00 0.00 Average 1048052 0 79 16 那么,这个结果究竟意味着什么呢? · cycle/s——报告每秒的页面置换周期数。 · fault/s——提供每秒的缺页次数。 · Slots——提供分页空间中空闲页面的数目。 · odio/s——提供每秒的非分页磁盘 I/O 次数。 IXDBA.NET社区论坛 在这个示例中,您可以看到每秒钟有许多次的缺页,但是其他的值并不大。您还可以看到,分页空间中有 1048052 个 4k 的页面可用,总计约 4GB。下面,让我们再来深入地研究特定 AIX 工具的使用。 1.2.2 特定的 AIX 内存监视 在这个部分中,我提供了关于可用的特定 AIX 工具的概述,包括 svmon、procmon、topas 和 nmon。其中的大多数工具都允许您快速地进行故障排除,并获取相关的数据以便进行历史趋势研究和分析。 svmon 是一种分析实用工具。它专门针对于 VMM。它可以提供许多信息,包括所使用的实际、虚拟和分页空间内存。-G 标志可以为主机中的内存使用情况提供全局的视图(请参见清单 5)。 清单 5. 使用带 -G 标志的 svmon # svmon -G size inuse free pin virtual memory 1048576 1048416 160 79327 137750 pg space 1048576 524 work pers clnt lpage pin 79327 0 0 0 in use 137764 910652 0 0 其中的 size 列报告了 RAM 的大小,单位是大小为 4k 的页面。其中的 inuse 列报告了进程所使用的 RAM 中的页面数,加上属于一个已终止的进程但仍位于 RAM 中的持久页面的数目。其中的 free 列报告了空闲列表中页面的数目。其中的 pin 列报告了物理内存 (RAM) 中固定的页面数。固定的页面不能被调出。 paging space 列报告了分页空间的实际使用情况(单位是大小为 4k 的页面)。重要的是,应该清楚这个结果与 vmstat 所报告的结果之间的区别。vmstat 中的 avm 列显示了访问的所有虚拟内存,即使它没有被调出。我还习惯查看工作和持久页面的数目。这些参数显示了 RAM 中工作和持久页面的数目。这个内容为什么非常重要呢?也许您还记得第 1 部分中的内容,我曾介绍了工作和持久存储之间的区别。当您的进程对计算信息进行处理时,将使用到计算内存。它们使用工作段,而这些工作段是临时的(暂时的),并且当进程终止或者页面被替换时,这些工作段将不复存在。文件内存使用持久段,并在磁盘上具有持久的存储位置。数据文件或者可执行程序通常都映射为持久段,而不是工作段。在可以选择的情况下,您更希望将文件内存调出到磁盘,而不是计算内存。在这种情况下,与文件内存相比,计算内存更有可能被调出。也许,对 vmo 参数稍作优化就可以极大提高系统的性能。svmon 的另一个有价值的特性是,您可以显示给定进程的内存统计信息。清单 6 提供了一个示例。 清单 6. 使用 svmon 显示给定进程的内存统计信息 # svmon -P | grep -p 15256 ------------------------------------------------------------------------------- Pid CoMMand Inuse Pin Pgsp Virtual 64-bit Mthrd LPage 15256 X 12102 3221 0 12022 N N N 从这个示例中,您可以确定该进程并没有使用分页空间。使用前面介绍过的 ps 命令,再加上 svmon,您就可以找出大量消耗内存资源的位置。 让我们使用一种对用户来说更加友好的工具,topas。topas 是一种非常优秀的小型性能监视工具,它可以用于许多目的(请参见 图 1)。 IXDBA.NET社区论坛 图 1. topas 工具 正如您所看到的,运行 topas 将为您提供一个有关进程信息、CPU、I/O 和 VMM 活动的列表。从这个列表中,您可以看到该系统仅使用了很少的分页空间。我常常使用这个命令快速地进行故障排除,特别是当我希望在屏幕上显示比 vmstat 更详细的内容时。我将 topas 看作是 vmstat 的图形化版本。在经过改进之后,现在它可以捕获数据以进行历史分析。 procmon 命令又如何呢?它在 AIX Version 5.3 中首次引入,不仅可以提供整体 CPU 性能统计,还允许您对实际运行的进程进行相应的操作。您可能已经了解,可以动态地对一个进程使用 kill 或者 renice 命令,但我敢打赌,您肯定不清楚如何深入地研究有关内存的内容。 尽管我认为人们通常使用这个工具进行 CPU 分析,但是它也为 svmon 提供了很好的挂钩,以便在紧要关头为您提供帮助。这个视图可以为从 procmon 中使用 svmon 实用工具设置相关的选项,它允许您以一种更合适的格式提取信息(请参见图 2)。 图 2. 为从 procmon 中使用 svmon 实用工具设置选项 您还可以将 procmon 数据导出到一个文件,这使得它成为一种优秀的数据收集工具。 在所有的性能工具中,我最喜欢的是一种不受支持的 IBM 工具,名为 nmon。它在某些方面与 topas 类似,nmon 收集到的数据可以显示在屏幕上(类似于 topas)或者通过报告提供(您可以捕获相关的信息以进行趋势研究和分析)。这个工具提供了一些其他工具所没有的功能,它可以在 Microsoft® Excel 电子表格中显示美观的图表,可以将其交给高级管理人员或者其他技术团队进行更深入地分析。可以使用另一种不受支持的工具,名为 nmon analyzer,它为 nmon 提供了相应的挂钩。图 3 显示了 nmon 分析结果的一个示例。 图 3. nmon 分析输出 在使用这个工具的过程中,您将看到 nmon 所提供的许多不同类型的视图,这些视图可以提供所有关于 CPU、I/O 和内存的使用信息。 总结 在本文中,您了解了可用于捕获数据以进行内存分析的各种工具。您还学习了如何对存在性能问题的系统进行故障排除,您可以对虚拟内存进行控制。优化工作实际上只是适当的优化方法中的一小部分,对于这一点,重申多少次都不为过。如果不能够捕获数据并仔细地、正确地分析您的系统,那么您所能做的工作就好像是一名医生根本不对患者进行检查就胡乱地使用抗生素药物。 您可以使用许多不同类型的性能监视工具。有些工具可以从命令行中运行,以便快速地检查系统的运行情况。有些工具更适合于进行长期的趋势研究和分析。有些工具甚至可以为您提供图形格式的数据,可以将这些数据交给非技术方面的工作人员。无论您使用哪种工具,都还必须仔细地了解您所查看的信息的真正含义。不要只根据少量的数据样本,就急于得出结论。另外,不要仅依赖于某一种工具。为了证实您的结论,在进行分析时,您应该至少使用两种不同的工具。我还简要地介绍了优化方法和建立系统正常运行时的基准数据的重要性。在您检查数据并实施优化之后,您必须继续捕获数据,并分析所作更改的结果。而且,您应该一次只进行一处更改,这样才能够真正地确定每项更改的效果. 1.3 AIX 5L 内存性能优化之配置和管理交换空间,优化(VMM) AIX 5L 内存性能优化之配置和管理交换空间,优化(VMM) ,通过命令掌握AIX系统的交换空间内存使用状况,进而进行系统内存的性能优化,是一个系统管理员对系统优化要做的基本工作! 什么是交换(分页)空间?它是与 VMM 有关的。VMM 使用交换(分页)空间存储没有使用活动 RAM 的进程。正是因为这个目的,交换空间是系统整体性能的关键组件。作为一名管理员,您需要了解如何监视和优化您的分页参数。分页空间本身是一个特殊的逻辑卷,它存储了当前不访问的信息。您必须确保您的系统拥有足够的分页空间。如果分页空间过小,整个进程可能会丢失,并且当所有的空间都占满后,系统可能会崩溃。尽管值得再次说明,分页空间是 VMM 中的一部分,但是更重要的是真正地理解内核如何将进程调入到 RAM 中,过多的分页肯定会对性能造成影响。AIX 通过将内核与 VMM 紧密集成在一起,实现了一种称为请求分页的方法。事实上,内核本身的大部分都驻留在虚拟内存中,这样可以帮助释放它的片段空间以用于其他进程。我将更深入地介绍它的工作方式,并介绍在管理和优化分页空间时需要使用的一些工具。 您将了解到,优化工作必须根据系统的类型来进行。例如,对于使用 Oracle 联机事务处理 (OLTP) 类型数据库的系统,在配置多大的交换空间以及如何优化分页参数方面,通常有一些特定的推荐方案。正如本系列前几期文章中所介绍的,如果不能真正地了解系统的运行状况,您就无法对分页设置进行真正地优化。您需要了解所使用的工具、如何最好地分析将要捕获的数据,并熟悉实现分页空间的最佳实践。根据我的经验,导致系统崩溃的首要原因就是耗尽了分页空间。如果您仔细地阅读本文,并且遵循其中的建议方案,那么应该不会出现这种情况。很显然,您并不希望系统发生崩溃,但如果的确出现了这种情况,那么您将希望这是由于硬件故障造成的、而与您的操作无关,或者由于系统管理员的疏忽造成。 请求分页 在这个部分中,我介绍了 AIX 如何处理分页,给出了交换和分页的定义,并深入地研究了分页空间分配的几种不同模式。这些概念可以帮助您理解后续有关监视、配置和优化的部分。 大多数管理员都认为分页是一件很麻烦的事情。实际上,分页是 AIX 所完成的任务中非常必要的一部分,这是由于 AIX 内核与 VMM 及其请求分页的实现进行了紧密的集成。请求分页的工作原理是,内核一次仅加载部分页面到实际内存中。当 CPU 需要另一个页面时,它会到 RAM 中查找。如果无法在 RAM 中找到这个页面,则出现一次缺页,然后向内核发出信号以便从磁盘中加载更多的页面到 RAM。请求分页的一个优点是,分页空间不需要非常大,因为数据总是在分页空间和 RAM 之间不断地交换。在较早的 UNIX? 系统中,将分页预先分配到磁盘,无论使用还是不使用它们。这使得所分配的磁盘空间可能永远不会被使用。从本质上说,请求分页可以避免盲目地分配磁盘空间。应该使得进程的交换最少,因为许多任务可能存储在 RAM 中。的确如此,因为进程(页面)只有一部分存储在 RAM 中。 交换指的是什么呢?尽管分页和交换通常可以互换使用,但它们之间存在细微的区别。如前所述,在进行分页时,进程的部分内容将在磁盘和 RAM 之间来回移动。当发生交换时,会将整个进程来回移动。为了支持这种情况,在将进程移动到分页空间之前,AIX 会挂起整个进程。只有在将进程交换回 RAM 之后,才能够继续执行它。出现这样的情况并不是很好,您应该尽量防止交换的发生,交换可能会导致另一种称为颠簸的情况(稍后将介绍这个内容)发生。 作为一名 UNIX 管理员,您可能对分页和交换的一些概念已经非常熟悉。AIX 提供了三种不同模式的分页空间分配策略:延迟的页面空间分配(deferred page space allocation)、晚页面空间分配(late page space allocation)、早页面空间分配(early page space allocation)。AIX 的缺省策略是延迟的页面空间分配。这样可以确保将分页空间的分配延迟到必须调出页面的时候进行,从而确保不会浪费分页空间。事实上,当您拥有很大的 RAM 时,您甚至不需要使用任何分页空间(请参见 清单 1)。 清单 1. 确保没有浪费的分页空间 # lsps -a Page Space Physical Volume Volume Group Size %Used Active Auto Type hd6 hdisk0 rootvg 4096MB 1 yes yes lv 清单 1 中仅使用了百分之一的分页空间。 让我们来看看 AIX 是如何处理分页空间分配的(请参见清单 2)。 清单 2. 检查 AIX 如何处理分页空间分配 # vmo -a | grep def defps = 1 清单 2 说明使用了这种缺省的方法(延迟的页面空间分配)。要禁用这个策略,您需要将参数设置为 0。这将使得系统使用晚分页空间分配策略。晚分页空间分配策略会在 RAM 中相应的页面被修改时才分配分页磁盘块。这种方法通常用于那些性能比可靠性更加重要的环境。在本文所介绍的场景中,程序可能会因为缺少内存而运行失败。那么早页面空间分配又如何呢?如果您希望确保进程不会因为较低的分页情况而终止,通常可以使用这种策略。早页面空间分配策略可以预先分配分页空间。这是与晚分页空间分配策略截然相反的。对于可靠性要求很高的环境,可以使用这种策略。启用这种策略的方法是将 PSALLOC 环境变量设置为 early (PSALLOC=early)。 您还应该了解在 AIX Version 5.3 中首次引入的垃圾回收特性。这个特性允许您释放分页空间磁盘块,从而允许您配置比通常所需要的更少的分页空间。这种特性只能用于缺省的延迟页面空间分配策略。 监视和配置分页空间 在这个部分中,我将向您介绍如何监视系统中的分页空间。我还将介绍用于配置分页空间的各种命令,以及帮助系统管理员使用分页空间的其他工具。 要确定系统中分页空间的使用量,最简单的方法是运行 lsps 命令(请参见清单 3)。 清单 3. 运行 lsps 命令 # lsps -s Total Paging Space Percent Used 4096MB 1% 您已经在前面看到了 -a 标志。我喜欢使用 -s 标志,因为 -a 标志仅仅显示所使用的分页空间,而 -s 标志则可以提供所有分配的分页空间的汇总信息,包括使用早页面空间分配策略分配的空间。当然,这个标志仅适用于禁用了分页分配缺省方法的情况。 接下来再研究 vmstat。本系列文章的第 2 部分非常详细地介绍了 vmstat,这是我最喜欢的 VMM 监视工具之一。我发现,要确定系统的运行情况,使用这个命令是最简单的方法。您可以从中发现是否存在许多分页以及是否发生了颠簸。 IXDBA.NET社区论坛 让我们来看看清单 4 中显示的一些输出。 清单 4. 使用 vmstat # vmstat 1 5 System Configuration: lcpu=2 mem=4096MB kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 1 0 166512 627 0 0 1 0 92 0 277 3260 278 3 1 96 0 1 0 166512 623 0 0 1 0 40 0 253 2260 108 2 1 96 1 1 0 166512 627 0 0 0 0 0 0 248 3343 91 0 1 96 2 1 0 166512 627 0 0 0 0 2 0 247 3164 84 0 1 99 0 1 0 166512 627 0 1 0 0 0 0 277 3260 83 2 1 97 0 其中,最重要的列包括: · avm——这一列表示您所使用的活动虚拟内存量(单位为 4k 大小的页面),不包括文件页面。 · fre ——这一列表示内存空闲列表的大小。在大多数情况下,我并不担心这个值什么时候变得很小,因为 AIX 总是会充分地使用内存,并且不会像您希望的那样尽早地释放内存。这个设置由 vmo 命令的 minfree 参数来确定。归根结底,分页的信息更加重要。 · pi——这一列表示从分页空间调入的页面数。 · po——这一列表示调出到分页空间的页面数。 正如您在清单 4 中所看到的,该系统中几乎没有进行分页。 清单 5 显示了一个可能出现了颠簸的系统的示例。 清单 5. 可能存在颠簸的系统 # vmstat 2 3 System Configuration: lcpu=4 mem=4096MB kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 1 2 166512 7 0 57 127 0 929 0 2779 3260 1278 3 30 50 0 20 1 5 166512 12 0 39 129 0 409 0 2538 2260 1108 2 10 30 10 50 1 6 166512 110 0 8 212 0 480 0 2487 3343 991 0 27 33 20 30 凭什么能够得出这个结论呢?首先,请看 po 列。该列的值表示页面不断地在磁盘和 RAM 之间来回移动。您还应该发现系统中存在瓶颈,因为阻塞进程和等待时间都高得离谱。而且空闲列表的值也比正常情况要低一些。您可以使用 vmo 命令来查看空闲列表,其值为 120。这意味着,空闲列表的值不应该低于 120。一般情况下,我认为空闲列表的值较低并不能说明问题,但是在这个示例中,它比正常值还要低。当出现这种情况时,通常表示系统中发生了颠簸现象。颠簸现象的典型标志是,当操作系统试图释放资源时,首先警告进程以释放分页空间,然后终止整个进程。在优化 vmo 参数的过程中,您可以帮助设置颠簸开始时的阈值。您还可以使用 topas 或者 nmon 来查看内存的使用情况。这两种实用工具可以以图形的方式、更加友好的格式显示分页信息(请参见清单 6)。 清单 6. 使用 topas 以图形化的方式显示分页信息 Topas Monitor for host: testbox EVENTS/QUEUES FILE/TTY Sun May 20 11:48:42 2007 Interval: 2 Cswitch 86 Readch 90043 Syscall 1173 Writech 1336 Kernel 0.5 |# | Reads 103 Rawin 1 User 0.0 | | Writes 91 Ttyout 157 Wait 0.0 | | Forks 0 Igets 0 Idle 99.5 |############################| Execs 0 Namei 147 Runqueue 0.0 Dirblk 0 Network KBPS I-Pack O-Pack KB-In KB-Out Waitqueue 0.0 en1 1.6 4.0 4.0 0.2 1.4 en2 0.0 0.0 0.0 0.0 0.0 PAGING MEMORY lo0 0.0 0.0 0.0 0.0 0.0 Faults 0 Real,MB 4095 Steals 0 % Comp 16.6 Disk Busy% KBPS TPS KB-Read KB-Writ PgspIn 0 % Noncomp 84.3 hdisk0 0.0 0.0 0.0 0.0 0.0 PgspOut 0 % Client 0.5 hdisk1 0.0 0.0 0.0 0.0 0.0 PageIn 0 hdisk3 0.0 0.0 0.0 0.0 0.0 PageOut 0 PAGING SPACE Sios 0 Size,MB 4096 Name PID CPU% PgSp Owner % Used 0.5 topas 156220 0.2 2.5 root NFS (calls/sec) % Free 99.4 sldf 96772 0.2 0.2 rds ServerV2 0 syncd 12458 0.0 0.6 root ClientV2 0 Press: lrud 9030 0.0 0.0 root ServerV3 0 "h" for help gil 10320 0.0 0.1 root ClientV3 0 "q" to quit PAGING 列(如清单 6 中以粗体显示的内容)显示根本不存在分页。 那么如何维护分页空间的大小呢?在 AIX 中,您可以使用 swap 命令(请参见 清单 7)来完成这项任务。 清单 7. 使用 swap 命令 # swap -l device maj,min total free /dev/hd6 10, 2 4096MB 4093MB 其结果说明,系统中定义了一个交换分区。您还将注意到,其中只使用了 3MB 的空间。清单 8 显示了当分页空间利用率过高时会发生什么样的情况。 清单 8. 耗尽了分页空间 # lsps -a Page Space Physical Volume Volume Group Size %Used Active Auto Type hd6 hdisk0 rootvg 4096MB 78 yes yes lv 在这个示例中,您的分页空间变得很低,以至于可能出现危险。您的系统从启动到现在可能已经很长时间了。如果您运行数据库(如 Oracle),那么直到您清空数据库缓存,才会释放虚拟内存。让我们来查看一下您的系统启动了多长时间了(请参见清单 9)。 清单 9. 使用 uptime 命令 # uptime 11:58AM up 9 days, 15:50, 23 users, load average: 0.00, 0.03, 0.04 如清单 9 中所示,这个系统才启动了 9 天。如果在这么短的时间内,分页空间利用率就增加到百分之七十八,那么您应该考虑添加更多的分页空间。如果您的系统中还有足够的空间,可以添加另一个分区。 一个最佳实践是 空间的大小相同。在这个示例中,我会添加另一个 4GB 的分页空间到 rootvg 卷。您可以使用系统管理工具 (SMIT) 来完成这项任务,并使用 smit mkps 和 smit swapon 命令以激活分页空间。或者,您可以从命令行使用 swapon(包括 swapoff)命令。如果可以,请使用最少被分页区域所使用的磁盘。另外,可以尝试不要为每个物理磁盘分配多个分页逻辑卷。尽管有些管理员并不介意将分页空间放到外部存储中,但是我个人并不推崇这种做法。如果您采取了这种方式,并且外部存储直到重新启动之后才可用,那么您的系统可能会出现崩溃(这取决于所分配的分页空间的大小)。如果可以,请将它们分散到多个磁盘,并且使用 lsps -a 命令确保它们是联机的。 您的系统究竟需要多大的分页空间呢?其基本原则是什么呢?首先,从提供应用程序的组织开始。DB2® 或者 Oracle 团队应该可以告诉您,从数据库的角度来看,系统究竟需要分配多大的分页空间。如果是一家小型的公司,您就不得不自己研究确定。请多加小心。数据库管理员通常会提出最大的需求,并且告诉您将分页空间的大小设置为您的 RAM 的两倍(以前的基本原则)。通常来说,如果我的系统拥有超过 4GB 的内存,我会按照 RAM 的大小来创建分页空间。在投入运行后,要经常监视您的系统。如果您看到分页空间的利用率从来都没有接近过百分之五十,那么就不需要添加额外的空间。您可以查看最近 Oracle 为 AIX 提供的文档(请参见参考资料部分),以证实这个基本原则。其中说明了,分页空间的推荐初始设置为 RAM 大小的一半加上 4GB,但是上限为 32GB。它推荐使用 lsps -a 命令监视系统中空间使用率超过百分之二十五的情况。添加根本不会用到的额外空间,是毫无意义的。 IXDBA.NET社区论坛 经常有人问我,如何判断某个进程是否正在使用分页空间?可以查看一下 svmon 的输出,如清单 10 中所示。 清单 10. 使用 svmon # svmon -P | grep -p 17602 ------------------------------------------------------------------------------- Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage 17602 sendmail 11877 3211 0 11691 N N N 在确定了 PID 数值之后,可以使用 svmon 进一步深入研究。这样可以帮助您确定是否需要对您的应用程序进行优化,从而帮助停止分页或者优化您的操作系统。对 svmon 执行 man 命令,因为这个 AIX 内存特定的实用工具还有许多其他的用途。 使用 vmo 进行优化 在这个部分中,我使用 vmo 来优化分页参数,这可以极大地降低系统中的分页次数。我还介绍了一些需要更改的阈值和参数,它们会影响您的整体扫描开销。 您可以对 VMM 进行哪些优化工作来减少分页呢?在本系列的第一期文章中(请参见参考资料部分),我曾详细地介绍了 minperm 和 maxperm 参数,在本文中,我将对一些最重要的概念进行总结。在优化 vmo 设置的过程中,可以偏重于工作存储或者持久存储。通常,您希望偏重于工作存储。防止 AIX 调出工作存储并充分利用数据库缓存的方法是,将 maxperm 设置为一个较高的值(大于 80),并确保 lru_file_repage=0 参数表示是否应该考虑 VMM 重分页计数,以及它应该替换何种类型的内存。其缺省设置为 1,所以您需要将其更改为 0。可以使用 vmo 命令来完成这项工作。当您将该参数设置为 0 时,它会告诉 VMM,您希望仅替换文件页面,而不是计算页面。这正是您所希望的。您还需要设置 minperm、maxperm 和 maxclient 参数,如下面的清单 11 所示。 清单 11. 设置 minperm、maxperm 和 maxclient 参数 vmo -p -o minperm%=5 vmo -p -o maxperm%=90 vmo -p -o maxclient%=90 在以前的 AIX 版本中,您可以对 strict_maxperm 和 strict_maxclient 的缺省值进行优化。在 AIX Version 5.3 中,更改 lru_file_repage 参数是一种更加有效的优化方法,因为您希望不要使用 AIX 文件缓存。现在,让我们简要地总结一下 minfree 和 maxfree。如果空闲列表中的页面数低于 minfree 参数,VMM 开始替换页面,直到空闲列表至少包含 maxfree 参数中指定的页面数。AIX Version 5.3 中的缺省设置通常可以正常工作(请参见清单 12)。 清单 12. maxfree 和 minfree 的缺省设置 # vmo -a | grep free maxfree = 1088 minfree = 960 让我们来介绍一些优化页面空间的阈值。如前所述,当您的分页空间开始变得很低时,系统将会警告破坏性的进程,然后终止它们。更改哪些阈值可以影响这项活动呢?这些阈值分别是 npsware、npskill 和 nokilluid。Npswarn 是当空间变得较低时用于通知进程的阈值。Npskill 是 AIX 开始终止进程的阈值。如果您的策略是早页面空间分配策略,它将不会终止进程。如果您还记得,我曾提到过,这是最可靠的分页方法。Nokillid 是一个非常重要的阈值,因为如果它设置为 1,那么它将确保不会终止 root 所拥有的进程,即使达到了 npskill 阈值。 而且,当因为分页空间的问题使得进程不能通过 fork 系统调用来创建子进程时,调度程序将重新尝试为其创建子进程,共重试五次,每次重试之间延迟十个时钟周期。您可以更改 schedo 参数以增加或者减少尝试的次数。用于这项任务的参数是 pacefork 值。您可以查看的另一个重要参数是 lrubucket。对这个参数进行优化,可以降低扫描开销。在对拥有大量内存的系统进行扫描时,因为页面置换算法始终查找空闲帧,所以需要扫描的页帧的数目是非常重要的。增加这个值可以减少需要扫描的桶数。这样做可以帮助提高性能。清单 13 使用了带 -a 选项的 vmo 命令,以显示 lrubucket 的值。 IXDBA.NET技术社区 清单 13. 显示 lrubucket 的值 # vmo -a | grep lru lru_file_repage = 1 lru_poll_interval = 0 lrubucket = 131072 (this is in 4 KB frames) 要将其缺省值从 512MB 增加到 1GB,可以使用 # vmo -o lrubucket=262144。 您可以通过这种方式使用 vmo 来降低 AIX 系统中的分页。 1.4 AIX 5.3主机性能评估-Memory性能评估 1.4.1 VMM的管理简介 首先,还是简单讲解一下内存以及的VMM的一点工作原理。 内存和交换空间一般都是用页面来进行分配和管理的。在内存中存在两种类型的页面:计算页面(一般为可执行文件段中的页面)和文件页面(存储的数据文件的页面)。当我们执行程序或者读入数据的时候,内存中的页面就逐渐被占用。当空闲的内存只剩maxfree的时候,vmm的调页就被唤醒,通过调页算法,将内存中的页面转移到交换空间中。一直到空闲内存达到maxfree,才停止调页。 在这里,我们涉及到两个参数: 1)        Minfree:最小空闲页链表尺寸。一旦低于该值,系统偷页以填充页链表,保证有足够的内存页面。偷页就是将不常用的页面替换出去。 2)        Maxfree:最大空闲页链表尺寸。一旦高于该值,系统停止偷页。 如果发现空闲列表不足,可以用下面的方法增加minfree参数 #vmo -o minfree=1000 -o maxfree=1008 Setting maxfree to 1008 Setting minfree to 1000 #vmo –o minfree=1000 –o maxfree=1008 –P # -P参数使修改永久生效 一般情况下,minfree和maxfree通过下面的公式得到: maxfree=minmum(memory/128,128) ,minfree=maxfree-8 注意:在AIX 5.2之前的版本请使用/usr/samples/kernel/vmtune命令。 #/usr/samples/kernel/vmtune –f 1000 –F 1008   另外,关于内存的使用,我们还有两个经常碰到的参数需要关注: Minperm:用户I/O文件访问的最小缓冲区页数 Maxperm:用户I/O文件访问的最大缓冲区页数 Minperm和maxperm这两个参数的默认值分别为20%和80%。在这里主要与性能相关的是maxperm参数。maxperm参数指定了文件页面可以占用内存的上限,因为文件页面不主动释放,所以很容易造成内存的文件页面过高的占用,导致其他的应用内存使用紧张。调整参数值的方法如下: #vmo -o maxperm%=80 -o minperm%=20 Setting minperm% to 20 Setting maxperm% to 80 在AIX 5.2之前的版本请使用/usr/samples/kernel/vmtune命令。 #/usr/samples/kernel/vmtune -p 20–P 80 将min和max的值分别设置为20%和80%。   查看当前的参数设置方法如下: 1)vmo –a 显示当前所有的参数设置 在AIX 5.2之前的版本请使用 # /usr/samples/kernel/vmtune 显示当前所有的参数设置 #vmo -a cpu_scale_memp = 8 data_stagger_interval = 161 defps = 1 force_relalias_lite = 0 framesets = 2 htabscale = n/a kernel_heap_psize = 4096 large_page_heap_size = 0 lgpg_regions = 0 lgpg_size = 0 low_ps_handling = 1 lru_file_repage = 1 lru_poll_interval = 10 lrubucket = 131072 maxclient% = 80 maxfree = 1088 maxperm = 4587812 maxperm% = 80 maxpin = 4881650 maxpin% = 80 mbuf_heap_psize = 4096 memory_affinity = 1 memory_frames = 6029312 memplace_data = 2 memplace_mapped_file = 2 memplace_shm_anonymous = 2 memplace_shm_named = 2 memplace_stack = 2 memplace_text = 2 memplace_unmapped_file = 2 mempools = 4 IXDBA.NET社区论坛 minfree = 960 minperm = 1146952 minperm% = 20 nokilluid = 0 npskill = 49152 npsrpgmax = 393216 npsrpgmin = 294912 npsscrubmax = 393216 npsscrubmin = 294912 npswarn = 196608 num_spec_dataseg = 0 numpsblks = 6291456 page_steal_method = 0 pagecoloring = n/a pinnable_frames = 5601758 pta_balance_threshold = n/a relalias_percentage = 0 rpgclean = 0 rpgcontrol = 2 scrub = 0 scrubclean = 0 soft_min_lgpgs_vmpool = 0 spec_dataseg_int = 512 strict_maxclient = 1 strict_maxperm = 0 v_pinshm = 0 vm_modlist_threshold = -1 vmm_fork_policy = 1 vmm_mpsize_support = 1 2)vmstat -v # vmstat -v 6029312 memory pages 5734766 lruable pages 2801540 free pages 4 memory pools 406918 pinned pages 80.0 maxpin percentage 20.0 minperm percentage 80.0 maxperm percentage 2.3 numperm percentage IXDBA.NET社区论坛 135417 file pages 0.0 compressed percentage 0 compressed pages 0.0 numclient percentage 80.0 maxclient percentage 0 client pages 0 remote pageouts scheduled 312417 pending disk I/Os blocked with no pbuf 0 paging space I/Os blocked with no psbuf 2878 filesystem I/Os blocked with no fsbuf 0 client filesystem I/Os blocked with no fsbuf 0 external pager filesystem I/Os blocked with no fsbuf 显示minperm和maxperm和numperm的值。numperm值给出的是内存中文件页数。 系统调页的规则: 1)        如果numperm>maxperm,则只调出文件页面。 2)        如果numperm testsystem_yymmdd.csv 在完成了该任务之后,将这个 .csv 文件通过 ftp 上传到您的 PC,启动 nmon 分析程序电子表格(启用宏),并且单击 analyze nmon data。您可以从这里下载 nmon 分析程序。 图 3 是从一个 AIX 5.3 系统中获取的屏幕截图,它为每个磁盘的读写提供了磁盘汇总信息,单位是千字节每秒。 图 3. 每个磁盘的读写磁盘汇总信息,单位是千字节每秒 nmon 还可以帮助跟踪异步 I/O 服务器的配置,如清单 4 中的输出所示。 清单 4. 使用 nmon 跟踪异步 I/O 服务器的配置 lsattr -El aio0 lsattr -El aio0 autoconfig available STATE to be configured at system restart True lsattr -El aio0 fastpath enable State of fast path True lsattr -El aio0 kprocprio 39 Server PRIORITY True lsattr -El aio0 maxreqs 16384 Maximum number of REQUESTS True lsattr -El aio0 maxservers 100 MAXIMUM number of servers per cpu True lsattr -El aio0 minservers 50 MINIMUM number of servers True 在 AIX Version 5.3 之前,nmon 是唯一用于显示所配置的异步 I/O 服务器的数量,以及实际使用量的工具。正如前面的部分所述,最近对 iostat 进行了增强,使它也提供了这种功能。 1.5.4 结束语 本文介绍了磁盘 I/O 子系统的相对重要性。本文定义并介绍了 AIX I/O 栈,以及它与物理和逻辑磁盘 I/O 之间的关系。本文还介绍了在数据库环境中进行磁盘配置的一些最佳实践,研究了直接和并发 I/O 之间的区别,还介绍了异步 I/O 和 I/O 处理速率调整。您优化了异步 I/O 服务器,并配置了 I/O 处理速率调整。您从并发 I/O 模式的文件系统开始,研究了何时最适合实现并发 I/O。而且,您了解了关于 iostat,以及使用 sar、topas 和 nmonn 捕获数据的所有内容。您还研究了输出的不同类型,了解了许多在 sar 和 iostat 中使用的标志。本系列文章的第 2 部分将深入研究 AIX I/O 栈中的逻辑卷管理器层,并介绍一些快照类型的工具,它们可以帮助您快速地访问磁盘 I/O 子系统的状态。第 3 部分主要关注于使用各种工具跟踪 I/O 使用情况,如 filemon 和 fileplace,以及如何提高文件系统性能整体. 1.6 AIX 5L 磁盘性能优化之iostat、lvmstat、lslv、lspv 和 lsvg 1.6.1 引言 与其他子系统的优化工作不同,实际上在构建系统的体系结构设计阶段就应该开始进行磁盘 I/O 优化。尽管存在一些 I/O 优化参数的虚拟内存等价项(ioo 和 lvmo),但是提高磁盘 I/O 性能的最佳方法是正确地配置您的系统,而不是优化相关的参数。与虚拟内存优化不同,在创建了逻辑卷并开始运行之后,要更改它们的组织结构会变得更加复杂,所以您通常只有一次机会正确地完成这项任务。本文讨论了配置逻辑卷的方式,以及相对于物理磁盘应该将它们布置于何处,本文还介绍了用于监视您的逻辑卷的工具。其中,大多数工具并不适合于长期趋势研究,并且是 AIX 特定的工具,它们可以提供相关信息以便了解如何配置逻辑卷,以及是否针对您的环境对它们进行了优化。 本系列文章的第 1 部分介绍了 iostat,但其中仅介绍了使用该工具来查看异步 I/O 服务器。第 2 部分使用 iostat 来监视您的磁盘,并向您介绍了它能够完成哪些工作以帮助您快速地确定 I/O 瓶颈。尽管 iostat 是通用的 UNIX® 实用工具之一,并且它不是专门为 AIX 而开发的,但实际上,对于快速地确定系统的运行情况,它是非常有用的。更特定的 AIX 逻辑卷命令可以帮助您更深入地研究逻辑卷,以帮助您真正地分析实际问题(如果存在任何问题)。在使用这些工具之前,您必须清楚地了解您需要哪些信息,这一点是很重要的。本文描述了相关的工具,并向您介绍了如何分析它们的输出,这将帮助您分析磁盘 I/O 子系统。 1.6.2 逻辑卷和磁盘布置概述 这个部分定义了逻辑卷管理器(Logical Volume Manager,LVM),并介绍了它的一些特性。让我们深入地研究逻辑卷的概念,分析它们与提高磁盘 I/O 使用率之间的关系,并通过定义和讨论 intra-policy 和 inter-policy 磁盘实践,从物理磁盘的角度介绍有关逻辑卷的布置。 从概念上讲,逻辑卷层位于应用程序和物理层之间。在磁盘 I/O 的上下文中,应用程序层是文件系统或者原始逻辑卷。物理层由实际的磁盘组成。LVM 是一种 AIX 磁盘管理系统,它可以在逻辑和物理存储之间映射数据。这允许数据保存在多个物理盘片上,并使用专门的 LVM 命令对其进行管理和分析。实际上,LVM 控制系统中所有的物理磁盘资源,并帮助提供存储子系统的逻辑视图。了解它位于应用程序层和物理层之间,应该可以帮助您理解它为什么很可能是所有层中最重要的一层。甚至您的物理卷本身就是逻辑层的一部分,因为物理层仅包含实际的磁盘、设备驱动程序和任何您可能已经配置的阵列。图 1 阐释了这个概念,并显示了逻辑 I/O 组件与物理磁盘及其应用程序层非常紧密地结合在一起。 图 1. 逻辑卷图表 现在,让我们简要地、自底向上地介绍 LVM 中的各个元素。每个驱动器作为一个物理卷进行命名。多个物理卷组成一个卷组。在卷组中,定义了逻辑卷。LVM 允许数据位于多个物理驱动器,尽管可能将它们配置为属于单个卷组。这些逻辑卷可以是一个或者多个逻辑分区。每个逻辑分区具有一个与其相关联的物理分区。在其中,您可以拥有物理部分的多个副本,以用于各种目的,如磁盘镜像。 让我们简要地介绍一下逻辑卷的创建与物理卷之间的关系。图 2 描述了物理磁盘盘片上的实际存储位置。 图 2. 物理磁盘盘片上的实际存储位置 作为一般规则,靠近中央的数据要比靠近外边缘的数据具有更快的寻道时间。这与数据的密度有关。因为越靠近中央,密度越大,实际上磁头只需移动更短的距离。内部边缘(inner edge)通常具有最短的寻道时间。作为最佳实践,应用程序使用 I/O 越多,就应该使其位于越靠近物理卷中央的位置。请注意,对于这个最佳实践,有一些例外的情况。磁盘边缘的每个磁道比靠近中央的磁道能够保存更多的数据。虽然这样说,但是实际上应该顺序地访问位于边缘的逻辑卷,以获得更高的性能。对于开启了镜像写一致性检查(Mirror Write Consistency Check,MWCC)的逻辑卷来说也一样。这是因为,MWCC 扇区位于磁盘边缘而不是中央,这与逻辑卷的 intra-disk 策略有关。 让我们来讨论另一个重要的、称为逻辑卷 inter-disk 策略的概念。inter-disk 策略定义了一个逻辑卷的物理分区实际驻留的磁盘的数目。一般规则是,最小的 (minimum) 策略可以提供最大的可靠性和可用性,而最大的 (maximum) 策略可以提高性能。简单地说,数据所分散到的驱动器越多,性能就越好。一些其他的最佳实践包括:分配密集的逻辑卷以分隔物理卷,定义所需的逻辑卷的最大大小,并将经常使用的逻辑卷布置在一起。这正是为什么在配置系统之前您必须了解具体的数据,以便您从一开始就可以创建有意义的策略的原因。 在创建逻辑卷时,您可以使用下面命令或者 smit 快速路径定义自己的策略:# mklv 或 # smitty mklv。 1.6.3 监视逻辑卷并分析结果 这个部分提供了有关如何监视您的逻辑卷并分析结果的介绍。介绍了各种各样的命令以及它们的用途,并且您还将检查输出内容。 刚刚接到了有关某个数据库服务器性能迟缓的报告。您怀疑可能出现了 I/O 问题,所以您使用 iostat 开始进行分析。如果您还记得,在本系列文章的第 1 部分中曾介绍过这个命令(请参见参考资料),尽管只是用作查看异步 I/O 服务器的目的。现在,让我们仔细地研究 iostat。iostat,相当于用于虚拟内存的 vmstat,很可能是概略了解 I/O 子系统运行情况的最有效方式。 清单 1. 使用 iostat # iostat 1 System configuration: lcpu=4 disk=4 tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 392.0 5.2 5.5 88.3 1.1 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1 0.5 19.5 1.4 53437739 21482563 hdisk0 0.7 29.7 3.0 93086751 21482563 hdisk4 1.7 278.2 6.2 238584732 832883320 hdisk3 2.1 294.3 8.0 300653060 832883320 这个示例中显示了哪些内容,而所有这些内容又是什么含义呢? · % tm_act:报告物理磁盘处于活动状态,或者磁盘请求的总时间的时间百分比。 · Kbps:报告传输到驱动器的数据量(单位为千字节)。 · tps:报告每秒钟发送到物理磁盘的传输量。 · Kb_read:报告在测量间隔中从物理卷读取的总数据量(单位为千字节)。 · Kb_wrtn:报告在测量间隔中向物理卷写入的数据量(单位为千字节)。 您需要非常小心地监视 % tm_act,因为当它的使用率超过大概百分之六十到七十时,这通常表示进程开始等待 I/O。这可能是即将发生的 I/O 问题的第一个征兆。将数据移动到更空闲的驱动器可以显著地帮助缓解这个负担。通常来说,您的数据位于越多的驱动器,性能就越好。与其他的事物一样,物极必反,因为您必须确保不会有太多的驱动器连接到任何一个适配器。有一种方法可以确定一个适配器是否满负荷,将连接到该适配器的所有磁盘的 Kbps 量累加起来。其总数应该小于磁盘适配器吞吐量速率,通常小于百分之七十。 使用 -a 标志(请参见清单 2)可以帮助您更深入地检查适配器的使用率。 清单 2. 使用带 -a 标志的 iostat # iostat -a Adapter: Kbps tps Kb_read Kb_wrtn scsi0 0.0 0.0 0 0 Paths/Disk: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1_Path0 37.0 89.0 0.0 0 0 hdisk0_Path0 67.0 47.0 0.0 0 0 hdisk4_Path0 0.0 0.0 0.0 0 0 hdisk3_Path0 0.0 0.0 0.0 0 0 Adapter: Kbps tps Kb_read Kb_wrtn ide0 0.0 0.0 0 0 Paths/Disk: % tm_act Kbps tps Kb_read Kb_wrtn cd0 0.0 0.0 0.0 0 0 显然,其中不存在任何瓶颈。使用 -d 标志允许您深入地研究一个特定的磁盘(请参见清单 3)。 清单 3. 使用带 -d 标志的 iostat # iostat -d hdisk1 1 System configuration: lcpu=4 disk=5 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1 0.5 19.4 1.4 53437743 21490480 hdisk1 5.0 78.0 23.6 3633 3564 hdisk1 0.0 0.0 0.0 0 0 hdisk1 0.0 0.0 0.0 0 0 hdisk1 0.0 0.0 0.0 0 0 hdisk1 0.0 0.0 0.0 0 0 让我们来研究一些特定的 AIX LVM 命令。您已经了解了有关磁盘布置的内容,以及从一开始就正确地设计系统体系结构的重要性。不幸的是,您并不总是能够使用这种方法。作为系统管理员,您有时可能会接手一些必须进行修复的系统。让我们研究一下磁盘上逻辑卷的布局,以确定您是否需要更改定义或者重新组织您的数据。 让我们首先了解一下卷组,并查找作为其中的一部分的逻辑卷。lsvg 命令可以提供卷组信息(请参见清单 4)。 清单 4. 使用 lsvg # lsvg -l data2vg Data2vg: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT data2lv jfs 128 256 2 open/syncd /data2 loglv00 jfslog 1 2 2 open/syncd N/A appdatalv jfs 128 256 2 open/syncd /appdata 现在,让我们使用 lslv,它可以提供关于逻辑卷的特定数据(请参见清单 5)。 清单 5. 使用 lslv # lslv data2lv LOGICAL VOLUME: data2lv VOLUME GROUP: data2vg LV IDENTIFIER: 0003a0ec00004c00000000fb076f3f41.1 PERMISSION: read/write VG STATE: active/complete LV STATE: opened/syncd TYPE: jfs WRITE VERIFY: off MAX LPs: 512 PP SIZE: 64 megabyte(s) COPIES: 2 SCHED POLICY: parallel LPs: 128 PPs: 256 STALE PPs: 0 BB POLICY: relocatable INTER-POLICY: minimum RELOCATABLE: yes INTRA-POLICY: center UPPER BOUND: 32 MOUNT POINT: /data LABEL: /data MIRROR WRITE CONSISTENCY: on/ACTIVE EACH LP COPY ON A SEPARATE PV ?: yes Serialize IO ?: NO www.ixdba.net 这个视图为您的逻辑卷属性提供了详细的描述。这些数据表示了什么含义呢?intra-policy 是 center,它通常是面向使用大量 I/O 的逻辑卷的最佳策略。正如前面的讨论中所介绍的,对于这个规则,有一些例外的情况。不幸的是,您碰到了这些情况之一。因为已经开启了镜像写一致性检查 (MWC),所以如果卷位于边缘,那么应该能够更好地为其提供服务。让我们来研究一下 inter-policy。inter-policy 是 minimum,它通常是面向可用性高于性能的情况的最佳策略。而且,其中逻辑分区的数目是物理分区的两倍,这表示您正在对系统进行镜像。在这个示例中,对于您来说,原始性能是最重要的目标,所以逻辑卷的配置没有采用与如何使用卷的实际情况相关的方式。而且,如果您正在对系统进行镜像,并且使用了外部存储阵列,这种情况可能变得更糟,因为您已经在硬件层提供了镜像,而实际上,这比使用 AIX 镜像的效率更高。 让我们更深入地研究清单 6 中的内容。 清单 6. 带 -l 标志的 lslv # lslv -l data2lv data2lv:/data2 PV COPIES IN BAND DISTRIBUTION hdisk2 128:000:000 100% 000:108:020:000:000 hdisk3 128:000:000 100% 000:108:020:000:000 lslv 的 -l 标志列举了与逻辑卷和每个逻辑卷的分布(distribution)相关的所有物理卷。然后,您可以确定已经将磁盘上百分之百的物理分区都分配给了这个逻辑卷。其中的分布(distribution)部分显示了每个物理卷中的实际物理分区数目。从中,您可以详细地了解其 intra-disk 策略。这些字段的顺序如下所示: · 边缘 (Edge) · 中间 (Middle) · 中央 (Center) · 内部中间 (Inner-middle) · 内部边缘 (Inner-edge) 该报告显示了,大多数数据位于中间,有些数据位于中央。 让我们继续研究,并找出与一个物理卷相关联的逻辑卷。可以使用 lspv 命令来完成这项任务(请参见清单 7)。 清单 7. 使用 lspv 命令 # lspv -l hdisk2 hdisk2: LV NAME LPs PPs DISTRIBUTION MOUNT POINT loglv01 1 1 01..00..00..00..00 N/A data2lv 128 128 00..108..20..00..00 /data2 appdatalv 128 128 00..00..88..40..00 /appdata 现在,您可以实际地确定这个磁盘上的哪些逻辑卷实现了最大的性能。 您可以进行更深入地研究,以获取更具体的信息(请参见清单 8)。 清单 8. 带 -p 标志的 lspv # lspv -p hdisk2 hdisk2: PP RANGE STATE REGION LV ID TYPE MOUNT POINT 1-108 free outer edge 109-109 used outer edge loglv00 jfslog N/A 110-217 used outer middle data2lv jfs /data2 218-237 used center appdatalv jfs /appdata 238-325 used center testdatalv jfs /testdata 326-365 used inner middle stagingdatalv jfs /staging 366-433 free inner middle 434-542 free inner edge 这个视图告诉您,该物理卷中哪些是空闲的、哪些已经被使用,以及在什么地方使用了哪些分区。这是一个非常好的视图。 IXDBA.NET社区论坛 最好的工具之一是,使用 lvmstat 查看 LVM 的使用情况(请参见清单 9)。 清单 9. 使用 lvmstat # lvmstat -v data2vg 0516-1309 lvmstat: Statistics collection is not enabled for this logical device. Use -e option to enable. 正如您可以从这个示例的输出中看到的,缺省情况下并没有启用它,所以在使用这个工具之前使用 # lvmstat -v data2vg -e 来启动这个功能。下面的命令可以在 10 个时间间隔内,每秒钟对 LVM 信息进行一次快照: # lvmstat -v data2vg 1 10 这个视图显示了从启动该数据收集工具以来,您的系统中利用率最高的逻辑卷。在优化系统时需要深入地研究逻辑卷层,这时候该视图是非常有价值的(请参见 清单 10)。 清单 10. 带 -v 标志的 lvmstat # lvmstat -v data2vg Logical Volume iocnt Kb_read Kb_wrtn Kbps appdatalv 306653 47493022 383822 103.2 loglv00 34 0 3340 2.8 data2lv 453 234543 234343 89.3 您需要在其中查找什么信息呢? · % iocnt:报告读写请求的数目。 · Kb_read:报告在测量间隔中读取的总数据量(单位为千字节)。 · Kb_wrtn:报告在测量间隔中写入的数据量(单位为千字节)。 · Kbps:报告已传输的数据量(单位为千字节)。 在您将其添加到您的指令库中之前,请查看所有这些命令的 man 页面。 使用 lvmo 进行优化 这个部分介绍了使用特定的逻辑卷优化命令。lvmo 用于设置和显示您的 pbuf 优化参数。它还可以用于阻塞 I/O 统计信息。 lvmo 是在 AIX Version 5.3 中首次引入的新的命令之一。请务必注意,使用 lvmo 命令只允许更改那些专门用于特定卷组的 LVM pbuf 可调参数。ioo 实用工具仍然是在系统范围内管理 pbufs 的唯一方法。这是因为,在 AIX Version 5.3 之前,pbuf 池参数是一种系统范围的资源。随着 AIX Version 5.3 的出现,LVM 可以为每个卷组管理一个 pbuf 池。什么是 pbuf?最准确地说,pbuf 是一个固定的内存缓冲区。LVM 使用这些 pbuf 来控制挂起的磁盘 I/O 操作。 让我们显示一下 data2vg 卷组的 lvmo 可调参数(请参见清单 11)。 清单 11. 显示 lvmo 可调参数 # lvmo -v data2vg -a vgname = data2vg pv_pbuf_count = 1024 total_vg_pbubs = 1024 mag_vg_pbuf_count = 8192 perv_blocked_io_count = 7455 global_pbuf_count = 1024 global_blocked_io_count = 7455 其中哪些是可调参数? · pv_pbuf_count:报告在将一个物理卷添加到该卷组时所添加的 pbuf 数目。 · Max_vg_pbuf_count:报告可以为一个卷组分配的最大 pbuf 量。 · Global_pbuf_count:报告在将一个物理卷添加到任何卷组时所添加的 pbuf 数目。 让我们为这个卷组增加 pbuf 计数: # lvmo -v redvg -o pv_pbuf_count=2048 老实说,我通常并不使用 lvmo,而是使用 ioo。我更习惯优化全局参数。请务必注意,如果您将这个 pbuf 值设置得太大,将会导致性能降低。 www.ixdba.net 1.6.4 结束语 本文重点关注于逻辑卷以及它们与磁盘 I/O 子系统的关系。本文概略地定义了逻辑卷,并说明了它与应用程序和物理层的关系。本文还定义和介绍了 inter-disk 和 intra-disk 策略的一些最佳实践,因为它们与创建和维护逻辑卷有关。您了解了为您的逻辑卷监视 I/O 使用情况的各种方法,并且分析了从用于帮助确定问题的各种命令所捕获的数据。最后,您通过确定和增加特定卷组所使用的 pbufs 量,对您的逻辑卷进行了优化。本系列文章的第 3 部分将在您继续研究文件系统的同时,重点关注于应用程序层,并使用各种命令以监视和优化您的文件系统和磁盘 I/O 子系统. 1.7 AIX 5.3主机性能评估-磁盘的I/O性能评估 对磁盘IO的性能考虑: 1)       将频繁访问的文件系统和裸设备应尽可能放置在不同的磁盘上。 2)       在建立逻辑卷时尽可能使用mklv的命令开关给不同的文件系统和裸设备赋予不同的内策略。 3)       使用磁盘设备驱动适配器的功能属性构建合适的RAID方式,以获得更高的数据安全性和存取性能。一般考虑采用RAID5或者RAID10方式,对于写要求比较高的系统,一般建议采用RAID10方式;关于RAID10 与RAID 5的比较,可以见piner的文章,作为补充我会在后面贴出。 4)        尽可能利用内存读写带宽远比直接磁盘I/O操作性能优越的特点,使频繁访问的文件或数据置于内存中进行操作处理; www.ixdba.net   在这里,顺带提一下裸设备以及文件系统的对比。 裸设备的优点: 1)        由于旁路了文件系统缓冲器而进行直接读写,从而具有更好的性能。对硬盘的直接读写就意味着取消了硬盘与文件系统的同步需求。这一点对于纯OLTP系统非常有用,因为在这种系统中,读写的随机性非常大以至于一旦数据被读写之后,它们在今后较长的一段时间内不会得到再次使用。除了OLTP,raw设备还能够从以下几个方面改善DSS应用程序的性能: 排序:对于DSS环境中大量存在的排序需求,raw设备所提供的直接写功能也非常有用,因为对临时表空间的写动作速度更快。 序列化访问:raw设备非常适合于序列化I/O动作。同样地,DSS中常见的序列化I/O(表/索引的完全扫描)使得raw设备更加适用于这种应用程序。 2)        直接读写,不需要经过OS级的缓存。节约了内存资源,在一定程度上避免了内存的争用。 3)        避免了操作系统的cache预读功能,减少了I/O。 4)        采用裸设备避免了文件系统的开销。比如维护I-node,空闲块等。     裸设备的缺点: 1、裸设备的空间大小管理不灵活。在放置裸设备的时候,需要预先规划好裸设备上的空间使用。还应当保留一部分裸设备以应付突发情况。这也是对空间的浪费。 2、很多备份工具软件对裸设备的支持不足,导致备份等的操作和方法比较原始、麻烦。     接下来,对于磁盘I/O的性能性能评估的方法。 1.7.1 iostat查看 #iostat 1 3   System configuration: lcpu=16 drives=11 paths=4 vdisks=0   tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 59.7 30.4 17.0 25.6 27.1   Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1 1.0 4.0 1.0 0 4 hdisk0 0.0 4.0 1.0 0 4 hdisk2 0.0 0.0 0.0 0 0 hdisk3 0.0 0.0 0.0 0 0 dac0 0.0 14477.7 1513.4 3072 11469 dac0-utm 0.0 0.0 0.0 0 0 dac1 0.0 0.0 0.0 0 0 dac1-utm 0.0 0.0 0.0 0 0 IXDBA.NET社区论坛 hdisk4 74.7 4968.3 440.1 1728 3262 hdisk5 99.6 9508.4 1073.3 1344 8206 cd0 0.0 0.0 0.0 0 0   tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 904.0 29.3 10.6 28.9 31.1   Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1 0.0 0.0 0.0 0 0 hdisk0 0.0 0.0 0.0 0 0 hdisk2 0.0 0.0 0.0 0 0 hdisk3 0.0 0.0 0.0 0 0 dac0 0.0 5956.0 492.0 1832 4124 dac0-utm 0.0 0.0 0.0 0 0 dac1 0.0 0.0 0.0 0 0 dac1-utm 0.0 0.0 0.0 0 0 IXDBA.NET技术社区 hdisk4 49.0 2840.0 221.0 512 2328 hdisk5 100.0 3116.0 271.0 1320 1796 cd0 0.0 0.0 0.0 0 0   tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 898.2 41.6 8.9 21.2 28.3   Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1 0.0 0.0 0.0 0 0 hdisk0 0.0 0.0 0.0 0 0 hdisk2 0.0 0.0 0.0 0 0 hdisk3 0.0 0.0 0.0 0 0 dac0 0.0 25695.7 2306.8 2344 23432 dac0-utm 0.0 0.0 0.0 0 0 dac1 0.0 0.0 0.0 0 0 IXDBA.NET社区论坛 dac1-utm 0.0 0.0 0.0 0 0 hdisk4 67.8 7908.3 542.3 712 7221 hdisk5 99.7 17787.4 1764.5 1632 16211 cd0 0.0 0.0 0.0 0 0 注意:第一个报告代表自系统启动以来所有的活动。 下面对输出的结果说明如下: ¨         tty TTY 的两列信息(tin 和 tou)显示了由所有 TTY 设备读写的字符数。 ¨         avg-cpu CPU 统计信息列(% user、% sys、% idle 和 % iowait)提供了 CPU 的使用故障。如果 iostat 命令表明 CPU 受限的情况不存在,并且 % iowait 时间大于 20%,则可能出现 I/O 或磁盘受限情况。这一情况可能在缺少实内存的情况下由过多调页产生。也有可能是由于不平衡的磁盘负载、碎片数据或应用模式而产生。 ¨         % tm_act 指示物理磁盘活动所占总时间的百分比(磁盘的带宽利用率),或者换句话说,磁盘请求的总时间未达到。驱动器在数据传送和处理命令时是活动的,例如寻道至新的位置。“磁盘活动时间”百分比正比于资源争用,反比于性能。当磁盘使用率增加时,性能就下降并且响应时间就增加。一般来说,当利用率超过 70% 时,进程将等待的时间会比完成 I/O 所必需的时间更长,因为大多数 UNIX 进程在等待它们的 I/O 请求完成时会阻塞(或休眠)。查找相对空闲驱动器来说繁忙的驱动器。把数据从繁忙的驱动器中移到空闲驱动器里可以帮助减轻磁盘的瓶颈。在磁盘中调入调出页面会使 I/O 负载增加。 ¨         Kbps指示了每秒钟多少 KB 的数据被传送(读或写)。这是在系统报告时间间隔内 Kb_read 加上 Kb_wrtn 的总和并除以的这段时间间隔的总数的结果。 ¨         tps 指示了每秒钟物理磁盘传送的次数。一次传送是设备驱动程序级别到物理磁盘的一次 I/O 处理请求。多重逻辑请求可以组合成单一的磁盘 I/O 请求。传送的大小是不确定的。 IXDBA.NET技术社区 ¨         Kb_read报告了在测量间隔中总的从物理卷中读取的数据量(以 KB 为单位)。 ¨         Kb_wrtn显示了在测量间隔中总的写入物理卷中的数据量(以 KB 为单位)。   我们也可以针对适配器作性能评估。想知道某个适配器是否饱和,使用 iostat 命令并且把所有连接到这个适配器上的磁盘的 Kbps 数量加起来。为了获得最大的聚集性能,总的传送率(Kbps)必须在磁盘适配器的吞吐量之下。在大多数情况下,使用 70% 的吞吐量,-a 或 -A 选项会显示这些信息。 #iostat -a 1 1   System configuration: lcpu=16 drives=11 paths=4 vdisks=0   tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 59.8 20.8 7.8 34.9 36.5   Adapter: Kbps tps Kb_read Kb_wrtn sisscsia2 0.0 0.0 0 0   Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1 0.0 0.0 0.0 0 0 hdisk0 0.0 0.0 0.0 0 0   Adapter: Kbps tps Kb_read Kb_wrtn sisscsia4 0.0 0.0 0 0   Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk2 0.0 0.0 0.0 0 0 hdisk3 0.0 0.0 0.0 0 0 www.ixdba.net   Adapter: Kbps tps Kb_read Kb_wrtn fcs0 12614.7 1338.0 2160 10502   Disks: % tm_act Kbps tps Kb_read Kb_wrtn dac0 0.0 12615.7 1338.0 2160 10503 hdisk4 59.8 4255.0 405.5 752 3519 hdisk5 99.6 8359.7 932.5 1408 6983   Adapter: Kbps tps Kb_read Kb_wrtn vsa0 0.0 0.0 0 0   Disks: % tm_act Kbps tps Kb_read Kb_wrtn dac0-utm 0.0 0.0 0.0 0 0 dac1-utm 0.0 0.0 0.0 0 0   Adapter: Kbps tps Kb_read Kb_wrtn IXDBA.NET技术社区 fcs2 0.0 0.0 0 0   Disks: % tm_act Kbps tps Kb_read Kb_wrtn dac1 0.0 0.0 0.0 0 0   Adapter: Kbps tps Kb_read Kb_wrtn ide0 0.0 0.0 0 0   Disks: % tm_act Kbps tps Kb_read Kb_wrtn cd0 0.0 0.0 0.0 0 0   1.7.2 sar –d查看 #sar -d 1 2   AIX jsdxh_db01 3 5 00C2C1BB4C00 10/24/07   System configuration: lcpu=16 drives=11   21:05:38 device %busy avque r+w/s Kbs/s avwait avserv   21:05:39 hdisk1 0 0.0 0 0 0.0 0.0 IXDBA.NET社区论坛 hdisk0 0 0.0 0 0 0.0 0.0 hdisk2 0 0.0 0 0 0.0 0.0 hdisk3 0 0.0 0 0 0.0 0.0 dac0 0 0.0 2051 20360 20.1 5.7 dac0-utm 0 0.0 0 0 0.0 0.0 dac1 0 0.0 0 0 0.0 0.0 dac1-utm 0 0.0 0 0 0.0 0.0 hdisk4 80 0.0 514 6137 1.2 5.3 hdisk5 100 2.6 1536 14223 26.4 5.9 cd0 0 0.0 0 0 0.0 0.0     21:05:40 hdisk1 0 0.0 0 0 0.0 0.0 hdisk0 0 0.0 0 0 0.0 0.0 hdisk2 0 0.0 0 0 0.0 0.0 IXDBA.NET社区论坛 hdisk3 0 0.0 0 0 0.0 0.0 dac0 0 0.0 1100 9835 34.0 11.8 dac0-utm 0 0.0 0 0 0.0 0.0 dac1 0 0.0 0 0 0.0 0.0 dac1-utm 0 0.0 0 0 0.0 0.0 hdisk4 84 0.1 270 2763 7.7 14.2 hdisk5 100 3.2 830 7072 42.6 11.0 cd0 0 0.0 0 0 0.0 0.0     Average hdisk1 0 0.0 0 0 0.0 0.0 hdisk0 0 0.0 0 0 0.0 0.0 hdisk2 0 0.0 0 0 0.0 0.0 IXDBA.NET社区论坛 hdisk3 0 0.0 0 0 0.0 0.0 dac0 0 0.0 1575 15097 27.1 8.7 dac0-utm 0 0.0 0 0 0.0 0.0 dac1 0 0.0 0 0 0.0 0.0 dac1-utm 0 0.0 0 0 0.0 0.0 hdisk4 82 0.1 392 4450 4.5 9.7 hdisk5 100 2.9 1183 10647 34.5 8.4 cd0 0 0.0 0 0 0.0 0.0 输出结果说明: ¨         device 设备的类型 ¨         %busy 报告设备忙于执行传输请求所用的时间 ¨         avque 该段时间内未完成的请求的平均值。 IXDBA.NET技术社区 ¨         r+w/s 进车设备的读/写传送次数。 ¨         blks/s 以512字节为单元的传送数 ¨         avwait 不执行,总是设置为 0.0 ¨         avserv 不执行,总是设置为 0.0   1.7.3 使用lslv –l lvname来评估逻辑卷的碎片情况 # lslv -l hd2 hd2:/usr PV COPIES IN BAND DISTRIBUTION hdisk0 114:000:000 22% 000:042:026:000:046 输出字段说明: ¨         PV 物理卷名称 ¨         Copies三个字段分别代表 在物理卷上至少包含一个物理分区(没有副本)的逻辑分区的数量 在物理卷上至少包含两个物理分区(一个副本)的逻辑分区的数量 在物理卷上至少包含三个物理分区(两个副本)的逻辑分区的数量 ¨         In band center分配策略占用的百分比。 ¨         Distribution 分配在物理卷每个区域内:物理卷的外部边缘、外部中间、中间、中心和内部边缘的物理分区的数目 对于该例中的结果说明如下: copies显示逻辑卷hd2只复制了一份。IN BAND显示了内策略是如何遵循的。这个百分比越高,分配效率就越好。在这个示例中,有总共114个逻辑分区(LP),42个位于中部,26个位于中心,还有46个位于内边缘。in band占用22%(26/(42+26+46))。DISTRIBUTION显示物理分区的具体的内策略部署,格式如下: outer-edge : outer-middle : center : inner-middle : inner-edge   关于物理卷内分配策略说明: 指定物理卷上选择物理分区时使用何种策略。五种常用的策略时边缘、内层边缘、中部、内层中部和中心。鉴于磁盘的读取方式,数据写入磁盘中心部分的寻道时间比写入外部边缘的寻道时间短。 1.7.4 lslv –p 评估物理布局 可以使用lslv –p hdiskN来查看在物理磁盘上的数据存储分布情况,同时也可以看到使用该内策略的逻辑卷以及挂载的文件系统。 #lspv -p hdisk3 hdisk3: PP RANGE STATE REGION LV NAME TYPE MOUNT POINT 1-30 free outer edge www.ixdba.net 31-110 used outer edge ocsapplv jfs /ocsapp 111-206 used outer middle paging00 paging N/A 207-219 free outer middle 220-328 free center 329-437 free inner middle 438-546 free inner edge       1.7.5 使用 vmstat 命令评估调页空间的 I/O # vmstat -s 43665986 total address trans. faults 30613 page ins 2956863 page outs 0 paging space page ins 0 paging space page outs 0 total reclaims 26027126 zero filled pages faults 16710 executable filled pages faults 0 pages examined by clock 0 revolutions of the clock hand 0 pages freed by the clock 5333765 backtracks 0 lock misses 0 free frame waits 0 extend XPT waits 21434 pending I/O waits 2937501 start I/Os 2937501 iodones 2723836378 cpu context switches 2176961335 device interrupts 0 software interrupts IXDBA.NET技术社区 0 traps 25243857756 syscalls 以下的“前和后”vmstat -s 的报告显示了调页活动的累计情况。请记住是 paging space page ins 和 paging space page outs 代表了真实的调页空间 I/O。这个(未限定)的 page ins 和 page outs 报告了总的由调页机制执行的 I/O,即调页空间 I/O 和普通文件 I/O。该报告已经经过编辑并且删除了和本讨论无关的信息。 # vmstat -s # before # vmstat -s # after 6602 page ins 7022 page ins 3948 page outs 4146 page outs 544 paging space page ins 689 paging space page ins 1923 paging space page outs 2032 paging space page outs 0 total reclaims 0 total reclaims 事实上在编译时产生比调页空间 page-outs 更多的 page-ins 意味着系统性能已被降至颠簸的边缘。有些页面正在重新分配空间,因为在它们完成调度前其帧已被其他所用。     1.7.6 使用filemon命令监控系统I/O filemon 命令监控文件系统和 I/O系统事件的跟踪,并且报告一个周期内的文件和 I/O 的访问性能。监视文件系统的性能,并且报告代表逻辑文件、虚拟内存段、逻辑卷和物理卷的 I/O 活动。 www.ixdba.net 语法: filemon [ -d ] [ -i Trace_File -n Gennames_File] [ -o File] [ -O Levels] [ -P ] [ -T n] [ -u ] [ -v ]   例如: # filemon -o fm.out -O all ; sleep 30 ; trcstop   Enter the "trcstop" command to complete filemon processing   [filemon: Reporting started] nlist failed. # more fm.out Wed Oct 24 21:23:56 2007 System: AIX oracle1 Node: 5 Machine: 0058D25D4C00   Cpu utilization: 4.7%   Most Active Files ------------------------------------------------------------------------ #MBs #opns #rds #wrs file volume:inode ------------------------------------------------------------------------ 0.2 1 51 0 unix /dev/hd2:30816 0.0 5 10 0 ksh.cat /dev/hd2:109023 0.0 1 2 0 cmdtrace.cat /dev/hd2:108887 0.0 1 2 0 hosts /dev/hd4:24621 0.0 1 1 0 vmstat.cat /dev/hd2:109265 输出结果保存在fm.out 中。输出字段说明如下: 最活跃的文件 ¨         #MBs 此文件在测量间隔时间内的传送量(以 MBs 为单位)。各行按照此字段降序排列。 ¨         #opns 在测量周期内的文件的打开次数。 ¨         #rds 文件读取调用的次数 ¨         #wrs 文件写入调用的次数 ¨         file 文件名称(文件路径全称在详细报告中)。 IXDBA.NET社区论坛 ¨         volume:inode 文件驻留的逻辑卷和在相连文件系统总的 i-node 数目。此字段可以被用来把文件和在详细的 VM 段报告中显示的其相应的永久段关联起来。此字段对在执行过程中创建和删除的临时文件可以为空。   最活跃的段 ¨         #MBs 此段在测量间隔时间内的传送量(以 MBs 为单位)。各行按照此字段降序排列。 ¨         #rpgs 从磁盘读入段中大小为 4-KB 的页面数 ¨         #wpgs 从段中写入磁盘大小为 4-KB 的页面数(page out) ¨         #segid 内存段的 VMM 标识 ¨         segtype段的类型:工作段、永久段(本地文件)、客户机段(远程文件)、页表段、系统段或者包含文件系统数据的指定永久段。 ¨         volume:inode 对永久段来说,包含相关文件的逻辑卷名称和文件的 i-node 数目。此字段可以被用来把段和在详细的文件状态报告中显示的其相应的文件关联起来。对非永久段来说,此字段为空。   最活跃的逻辑卷 ¨         util 逻辑卷使用率。 ¨         #rblk 从逻辑卷读取的大小为 512 字节的块数。 ¨         #wblk 写入逻辑卷大小为 512 字节的块数。 ¨         KB/s 每秒钟平均传送速率,单位 KB。 ¨         volume 逻辑卷名称。 ¨         description 文件系统安装点或是逻辑卷类型(paging, jfslog, boot, or sysdump)。例如,逻辑卷 /dev/hd2 是 /usr类型;/dev/hd6 是 paging 类型以及 /dev/hd8 是 jfslog 类型。有时也可能出现被压缩的这个字眼。这意味着所有的数据在被写入磁盘前都会以 Lempel-Zev(LZ)压缩技术自动压缩,在从磁盘读取时则自动解压缩。   最活跃的物理卷 ¨         util 物理卷使用率。 注:逻辑卷 I/O 请求在物理卷 I/O 请求前后启动。总的逻辑卷使用率将会看起来比总的物理卷使用率高。使用率用百分比表示,0.10 是指 10% 的物理卷在测量时间间隔内繁忙。 ¨         #rblk 从物理卷读取的大小为 512 字节的块数。 ¨         #wblk 写入物理卷大小为 512 字节的块数。 ¨         KB/s 每秒钟平均传送速率,单位 KB。 volume 物理卷名称。 ¨         description 有关物理卷类型的简单描述,例如, SCSI 多媒体 CD-ROM 驱动器或 16位 SCSI 磁盘驱动器。   文件系统的安装点(mount point)及文件的i节点(inode)可与命令ncheck一起使用,来找出相对应的文件。     1.7.7 监视磁盘 I/O 的小结 一般来说,高的 % iowait 表明系统存在一个应用程序问题、缺少内存问题或低效的 I/O 子系统配置。例如,应用程序的问题可能是由于许多 I/O 请求,而不是处理许多数据。理解 I/O 瓶颈并且要清楚解决瓶颈问题的关键在于提高 I/O 子系统的效率。磁盘的灵敏度可以以几种方式出现,并具有不同的解决方法。一些典型的解决方案可能包括: IXDBA.NET技术社区 ¨         限制在特定的物理磁盘上活动逻辑卷和文件系统的数目。该方法是为了在所有的物理磁盘驱动器中平衡文件 I/O。 ¨         在多个物理磁盘间展开逻辑卷。该方法在当有一些不同的文件被存取时特别有用。 ¨         为一个卷组创建多个 Journaled 文件系统(JFS)日志并且把它们分配到特定的文件系统中(最好在快速写高速缓存驱动器中)。这对应用程序创建、删除或者修改大量文件特别是临时文件来说十分有益。 ¨         如果 iostat 命令的输出结果表明您的负载的 I/O 活动没有被均衡地分配到系统磁盘驱动器中,并且一个或多个磁盘驱动器的使用率经常在 70-80 之间或更高,您就得考虑重组文件系统,例如备份和恢复文件系统以便减少碎片。碎片将引起驱动器过多地搜索并且可能产生大部分响应时间过长。 ¨         如果很大,I/O 增强的后台作业将涉及和相应时间交互,您可能希望激活I/O 调步。 ¨         如果有迹象表明一小部分文件被一次又一次地读取,您可以考虑附加的实存是否允许那些文件更加有效地缓存。 ¨         如果负载的存取模式是随机占主导地位,您可能要考虑增加磁盘并把按那些随机存取的文件分布到更多的磁盘中。 ¨         如果负载的存取模式是顺序占主导地位并且涉及多个磁盘驱动器,您可能要考虑增加一个或多个磁盘适配器。您也可以适当地考虑构建一个条带状逻辑卷来适应大型并且性能关键的顺序文件。 ¨         使用快速写高速缓存设备。 ¨         使用异步 I/O。       1.7.8 案例 说明:这个案例不是我的,不记得在哪里找的: # sar 1 5 01:24:21 %usr %sys %wio %idle 01:24:51 46 5 28 21 01:25:21 46 5 29 20 01:25:51 47 5 30 20 01:26:21 44 5 29 22 01:26:51 45 5 28 22   Average 46 5 29 21 在CPU资源尚未耗尽的情况下,有近1/3的CPU时间在等待磁盘I/O,可以肯定系统资源调度中I/O存在瓶颈;进而监控I/O使用情况: # iostat –d hdisk3 1 10 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk3 52.1 1086.9 262.6 1025224 1967060 hdisk3 93.0 4704.0 1121.0 636 4068 IXDBA.NET技术社区 hdisk3 98.0 1236.0 294.0 400 836 hdisk3 92.0 1556.0 386.0 780 776 hdisk3 81.0 760.0 178.0 696 64 hdisk3 89.0 1032.0 252.0 824 208 hdisk3 92.0 1376.0 329.0 708 668 hdisk3 99.0 1888.0 457.0 292 1596 hdisk3 98.0 1436.0 356.0 660 776 hdisk3 94.0 1624.0 403.0 852 772 hdisk3 99.0 2412.0 589.0 724 1688 可以发现hdisk3平均访问率非常高,几乎在90%以上,但从数据传输量来看其真正的数据量并不大 ,约为1500Kbps,而且读写均衡,说明运行的应用程序的对磁盘访问有小数据量频繁存取的特点(其实即为电信应用中话务呼叫的应用特点);这里可以肯定的是系统整体性能的瓶颈在于hdisk3的过度访问. 更进一步分析,使用系统监控命令filemon 或 lvmstat可以获得以下信息: #filemon –o filemon.out; sleep 30; trcstop #vi filemon.out(部分截取) util #rblk #wblk KB/s volume description ------------------------------------------------------------------------ 1.00 91080 108112 1561.1 /dev/workdbslv1 raw 0.00 0 4072 31.9 /dev/logiclogdbslv raw 0.00 8 4384 34.4 /dev/tcom_filelv /tcom_file IXDBA.NET技术社区 0.00 0 120 0.9 /dev/hd4 / 0.00 0 144 1.1 /dev/hd2 /usr 0.00 0 88 0.7 /dev/loglv01 jfslog 0.00 0 272 2.1 /dev/tcomlv /tcom 0.00 0 32 0.3 /dev/hd8 jfslog 0.00 0 104 0.8 /dev/loglv00 jfslog 0.00 0 8 0.1 /dev/hd3 /tmp   Most Active Physical Volumes ------------------------------------------------------------------------ util #rblk #wblk KB/s volume description ------------------------------------------------------------------------ 0.91 91088 116672 1628.2 /dev/hdisk3 SSA Logical Disk Drive 0.00 0 304 2.4 /dev/hdisk0 N/A 0.00 0 360 2.8 /dev/hdisk4 SSA Logical Disk Drive hdisk3的过分繁忙是由于其中的用于放置数据库表的/dev/workdbslv1裸设备过度繁忙造成的,至此我们可以通过调整裸设备的放置策略和数据库配置参数获得更好的 I/O性能: 1.建立workdbslv1时裸设备时使用如下命令调整: # mklv -y workdbslv1 -t raw –a’c’ datavg 128 hdisk3 hdisk4 hdisk3和hdisk4为属于同一个卷组的两个7133RAID逻辑盘。指定内分配策略。     1.7.9 RAID10和RAID5的比较 这篇是piner写的,我稍微增加了点点内容。 为了方便对比,这里拿同样多驱动器的磁盘来做对比,RAID5选择3D+1P的RAID方案,RAID10选择2D+2D的RAID方案,如图: www.ixdba.net 1、安全性方面的比较 其实在安全性方面,勿须质疑,肯定是RAID10的安全性高于RAID5。我们也可以从简单的分析来得出。当盘1损坏时,对于RAID10,只有当盘1对应的镜象盘损坏,才导致RAID失效。但是对于RAID5,剩下的3块盘中,任何一块盘故障,都将导致RAID失效。 在恢复的时候,RAID10恢复的速度也快于RAID5。   2、空间利用率的比较 RAID10的利用率是50%,RAID5的利用率是75%。硬盘数量越多,RAID5的空间利用率越高。   3、读写性能方面的比较 主要分析分析如下三个过程:读,连续写,离散写。 在介绍这三个过程之前,先介绍一个特别重要的概念:cache。 cache已经是整个存储的核心所在,就是中低端存储,也有很大的cache存在,包括最简单的raid卡,一般都包含有几十,甚至几百兆的raid cache。 cache的主要作用是什么呢?体现在读与写两个不同的方面,如果作为写,一般存储阵列只要求写到cache就算完成了写操作,所以,阵列的写是非常快速的,在写cache的数据积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入,至于cache数据的保护,一般都依赖于镜相与电池(或者是UPS)。 cache的读一样不可忽视,因为如果读能在cache中命中的话,将减少磁盘的寻道,因为磁盘从寻道开始到找到数据,一般都在6ms以上,而这个时间,对于那些密集型io的应用可能不是太理想。但是,如果cache能命中,一般响应时间则可以在1ms以内。两者应该相差3个数量级(1000倍)。 1)读操作方面的性能差异 RAID10可供读取有效数据的磁盘个数为4,RAID5可供读取有效数据的磁盘个数也为4个(校验信息分布在所有的盘上),所以两者的读的性能应该是基本一致的。     2)连续写方面的性能差异 在连续写操作过程,如果有写cache存在,并且算法没有问题的话,RAID5比RAID10甚至会更好一些,虽然也许并没有太大的差别。(这里要假定存储有一定大小足够的写cache,而且计算校验的cpu不会出现瓶颈)。 因为这个时候的RAID校验是在cache中完成,如4块盘的RAID5,可以先在内存中计算好校验,同时写入3个数据+1个校验。而RAID10只能同时写入2个数据+2个镜相。 如上图所示,4块盘的RAID5可以在同时间写入1、2、3到cache,并且在cache计算好校验之后,这里假定是6,同时把三个数据写到磁盘。而4块盘的RAID10不管cache是否存在,写的时候,都是同时写2个数据与2个镜相。 根据前面对缓存原理的介绍,写cache是可以缓存写操作的,等到缓存写数据积累到一定时期再写到磁盘。但是,写到磁盘阵列的过程是迟早也要发生的,所以RAID5与RAID10在连续写的情况下,从缓存到磁盘的写操作速度会有较小的区别。不过,如果不是连续性的强连续写,只要不达到磁盘的写极限,差别并不是太大。   3)离散写方面的性能差异 例如oracle 数据库每次写一个数据块的数据,如8K;由于每次写入的量不是很大,而且写入的次数非常频繁,因此联机日志看起来会像是连续写。但是因为不保证能够添满RAID5的一个条带,比如32K(保证每张盘都能写入),所以很多时候更加偏向于离散写入(写入到已存在数据的条带中)。 我们从上图看一下离散写的时候, RAID5与RAID10工作方式有什么不同。如上图:我们假定要把一个数字2变成数字4,那么对于RAID5,实际发生了4次io:先读出2与校验6,可能发生读命中然后在cache中计算新的校验写入新的数字4与新的校验8。 如上图我们可以看到:对于RAID10,同样的单个操作,最终RAID10只需要2个io,而RAID5需要4个io. 这里我忽略了RAID5在那两个读操作的时候,可能会发生读命中操作的情况。也就是说,如果需要读取的数据已经在cache中,可能是不需要4个io的。这也证明了cache对RAID5 的重要性,不仅仅是计算校验需要,而且对性能的提升尤为重要。 www.ixdba.net 当然,并不是说cache对RAID10就不重要了,因为写缓冲,读命中等,都是提高速度的关键所在,只不过RAID10对cache的依赖性没有RAID5那么明显而已。   4)磁盘的IOPS对比 假定一个case,业务的iops是10000,读cache命中率是30%,读iops为60%,写iops为40%,磁盘个数为120,那么分别计算在raid5与raid10的情况下,每个磁盘的iops为多少。 raid5: 单块盘的iops = (10000*(1-0.3)*0.6 + 4 * (10000*0.4))/120 = (4200 + 16000)/120 = 168 这里的10000*(1-0.3)*0.6表示是读的iops,比例是0.6,除掉cache命中,实际只有4200个iops。 4 * (10000*0.4) 表示写的iops,因为每一个写,在raid5中,实际发生了4个io,所以写的iops为16000个 为了考虑raid5在写操作的时候,那2个读操作也可能发生命中,所以更精确的计算为: 单块盘的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4)*(1-0.3) + 2 * (10000*0.4))/120 = (4200 + 5600 + 8000)/120 = 148 计算出来单个盘的iops为148个,基本达到磁盘极限 raid10 单块盘的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4))/120 = (4200 + 8000)/120 = 102 可以看到,因为raid10对于一个写操作,只发生2次io,所以,同样的压力,同样的磁盘,每个盘的iops只有102个,还远远低于磁盘的极限iops。   4、小结 所以要求较高的空间利用率,对安全性要求不是特别高、大文件存储的系统采用RAID5比较好。 相反,安全性要求很高,不计成本,小数据量频繁写入的系统采用RAID10的方式比较好。 1.8 AIX 5.3主机性能评估-CPU性能评估 1.8.1 1、vmstat 使用vmstat来进行性能评估,该命令可获得关于系统各种资源之间的相关性能的简要信息。当然我们也主要用它来看CPU的一个负载情况。 下面是我们调用vmstat命令的一个输出结果: IXDBA.NET技术社区 $vmstat 1 2 System configuration: lcpu=16 mem=23552MB kthr memory page faults cpu ----- ----------- ------------------------ ----------------- ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 0 0 3091988 2741152 0 0 0 0 0 0 1849 26129 4907 8 1 88 3 0 0 3091989 2741151 0 0 0 0 0 0 2527 32013 6561 15 2 77 6 对上面的命令解释如下: Kthr段显示内容 ¨         r列表示可运行的内核线程平均数目,包括正在运行的线程和等待 CPU 的线程。如果这个数字大于 CPU 的数目,则表明有线程需要等待CPU。 ¨         b列表示处在非中断睡眠状态的进程数。包括正在等待文件系统 I/O 的线程,或由于内存装入控制而被挂起的线程。 Memory段显示内容 ¨         avm列表示活动虚拟内存的页面数,每页一般4KB ¨         fre空闲的页面数,每页一般4KB Page段显示内容 ¨         re –该列无效 ¨         pi 从磁盘交换到内存的交换页(调页空间)数量,4KB/页。调页空间是驻留在硬盘上的虚拟内存的一部分。当内存使用过量时,会将溢出的工作组页面存储到调页空间中(窃取页)。当进程访问一个窃取页时,就产生了一个缺页故障,而这一页页必须从调页空间中读入到内存中。 ¨         po 从内存交换到磁盘的交换页数量,4KB/页。如果窃取的工作也在调页空间中不存在或者已经作了修改,则写入调页空间中。如果不被再次访问,它会留在调度空间中直到进程终止或者放弃空间。 ¨         fr 根据页面替换算法每秒释放的页数。当VMM页面替换例程扫描页面帧表(Page Frame Table,PFT)时,它会根据一些条件选取需要窃取的页面以补充空闲列表。该条件中包含工作页面和计算页面,释放的页面中,计算页面不产生I/O,工作页面如果数据没有发生修改,也不需要写回磁盘,也不会产生I/O。 ¨         sr 根据页面替换算法每秒所检查的页数。sr值比fr值高的越多,说明替换算法要查找可以替换的页面就越困难。 ¨         cy 每秒页面替换代码扫描了PFT多少次。因为增加空闲列表达到maxfree值,不一定需要完全扫描PFT表,而所有vmstat输出都为整数,所以通常cy列值为0。 Faults段显示内容(其实这段内容不需太多关注) ¨         in 在该时间间隔中观测到的每秒设备中断数。 ¨         sy 在该时间间隔中观测到的每秒系统调用次数。 ¨         cs 在该时间间隔中观测到的每秒钟上下文切换次数。 Cpu段显示内容 ¨         us 列显示了用户模式所消耗的 CPU 时间。 ¨         sy 列详细显示了 CPU 在系统模式所消耗的 CPU 时间。 ¨         id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待时间的百分比。 ¨         wa 列详细显示了有未决本地磁盘 I/O 时 CPU 空闲的时间百分比。wa 的值如果超过 25%,就表明磁盘子系统可能没有被正确平衡,或者这也可能是磁盘工作负荷很重的结果。 如果在一个单用户系统中,us + sy时间不超过 90%,我们就不认为系统的CPU是受限制的。 如果在一个多用户系统中,us + sy时间超过 80%, 我们就认为系统的CPU是受限的。其中的进程将要花时间在运行队列中等待。响应时间和吞吐量会受损害。 检查cpu,我们主要关注报告中的4个cpu列和2个kthr(内核线程)列。 在上面的示例中,我们可以观察到以下几个主要的信息: CPU IDLE比较高,比较空闲;r列为0,表明线程不存在等待; WA值不高,说明I/O压力不大; free值比较大,pi,po为0,表明内存非常富裕。空闲较多。     1.8.2 2、sar 第二个常用的是 sar命令,但是sar会增加系统的开销。当然有些情况下,我们使用sar比较方便。 sar的输出结果与前面的基本类似,这里不再作详细的介绍,关于命令的语法,也不再作详细的介绍,我们常用的命令格式: #sar 1 3   AIX jsdxh_db02 3 5 00C2C1EB4C00 10/24/07   System configuration: lcpu=16   17:52:26 %usr %sys %wio %idle physc 17:52:27 19 7 0 75 8.00 17:52:28 19 6 0 75 8.01 17:52:29 19 7 0 75 8.02   Average 19 7 0 75 8.01   在这里,sar命令输出的是一个整体的cpu使用情况的一个统计,统计分项目的内容也比较直观,通过名字就可以理解涵义。这里有一点比较方便的就是,在最后一行有一个汇总的average行,作为上述统计的一个平均。另外,补充说明一点的就是,一般来说,第一行统计信息包含了sar命令本身启动的cpu消耗,所以往往是偏高的,所以导致average值也往往是偏高一点的。当然,这不会对结果产生多大影响。 当我们有多个cpu的时候,而程序采用的是单线程,有时候会出现一种情况,我们检查发现,cpu总体的使用率不高,但是程序响应却比较慢。这里有可能就是单线程只使用了一个cpu,导致这个cpu100%占用,处理不过来,而其他的cpu却闲置。这时可以对cpu分开查询,统计每个cpu的使用情况。 #sar -P ALL 1 2   AIX jsdxh_db02 3 5 00C2C1EB4C00 10/24/07   System configuration: lcpu=16   18:03:30 cpu %usr %sys %wio %idle physc 18:03:31 0 0 69 0 31 0.00 1 50 50 0 0 1.00 2 0 0 0 100 0.52 3 0 0 0 100 0.48 4 0 1 0 99 0.54 5 0 0 0 100 0.46 6 0 0 0 100 0.53 7 0 0 0 100 0.47 8 0 0 0 100 0.53 9 0 0 0 100 0.47 10 0 2 0 98 0.54 11 0 0 0 100 0.46 12 11 58 0 31 0.00 13 100 0 0 0 1.00 14 0 0 0 100 0.53 15 0 0 0 100 0.47 - 19 7 0 75 8.01 18:03:32 0 0 71 0 29 0.00 1 50 50 0 0 1.00 2 0 0 0 100 0.52 3 0 0 0 100 0.48 4 0 1 0 99 0.54 5 0 0 0 100 0.47 6 0 0 0 100 0.52 7 0 0 0 100 0.47 8 0 0 0 100 0.53 9 0 0 0 100 0.47 10 0 2 0 98 0.54 11 0 0 0 100 0.46 12 39 41 0 20 0.00 13 100 0 0 0 1.00 14 0 0 0 100 0.52 15 0 0 0 100 0.47 - 19 7 0 75 7.98   Average 0 0 70 0 30 0.00 1 50 50 0 0 1.00 2 0 0 0 100 0.52 3 0 0 0 100 0.48 4 0 1 0 99 0.54 5 0 0 0 100 0.46 6 0 0 0 100 0.53 7 0 0 0 100 0.47 8 0 0 0 100 0.53 9 0 0 0 100 0.47 10 0 2 0 98 0.54 11 0 0 0 100 0.46 12 28 48 0 24 0.00 13 100 0 0 0 1.00 14 0 0 0 100 0.52 15 0 0 0 100 0.47 - 19 7 0 75 8.00   上面是分cpu统计的情况,结果应该也比较直观吧。 Sar还有其他一些比较特殊的使用方法,比如: 如果希望多个采样和多个报告,可为 sar 命令指定一个输出文件,这样就方便多了。将 sar 命令的标准输出数据定向到 /dev/null,并将 sar 命令作为后台进程运行。具体的命令格式为: sar -A -o /temp/sar_result.log 5 300 > /dev/null & 关于sar其他的一些使用方法,这里不再详述。 1.8.3 3、iostat 第三个可以用来使用的命令是iostat. $ iostat -t 2 4 tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 0.0 0.0 0.1 99.8 0.1 0.0 81.0 0.0 0.1 99.9 0.0 0.0 40.5 0.0 0.0 100.0 0.0 0.0 40.5 0.0 0.1 99.1 0.8 TTY 的两列信息(tin 和 tou)显示了由所有 TTY 设备读写的字符数 CPU 统计信息列(% user、% sys、% idle 和 % iowait)提供了 CPU 的使用情况。 注意:第一份报告为系统启动以来的一个累积值。   1.8.4 4、tprof 使用tprof命令用于统计每个进程的CPU使用情况 # tprof -x sleep 30 该命令的输出结果可查看 __prof.all文件。 此命令运行30秒钟,在当前目录下创建一个名为_prof.all 的文件。30秒钟内, CPU被调度次数约为3000次。__prof.all 文件中的字段Total 为此进程调度到的CPU次数。如果进程所对应的 Total字 段的值为1500,即表示该进程在3000次 CPU调度中占用了1500次,或理解为使用了一半的CPU时间。tprof的输出准确地显示出哪个进程在使用CPU 时间。 在我下面的这一份示例中,可以看到,大部分的cpu时间都是被wait所占用的。这里的wait实际上是idle进程,可以表明这个系统是一个完全空闲的系统。 $ more __prof.all Process PID TID Total Kernel User Shared Other ======= === === ===== ====== ==== ====== ===== wait 40970 40971 2998 2998 0 0 0 wait 32776 32777 2994 2994 0 0 0 wait 24582 24583 2985 2985 0 0 0 wait 16388 16389 2980 2980 0 0 0 syncd 221254 155707 31 31 0 0 0 caiUxOs 524540 2294015 3 0 0 3 0 netm 73746 73747 1 1 0 0 0 hats_nim 1671242 1220665 1 0 0 1 0 snmpd64 598258 1245291 1 1 0 0 0 rpc.lockd 639212 1728679 1 1 0 0 0 tprof 704622 2277437 1 0 0 1 0 trclogio 360524 2408625 1 1 0 0 0 trace 1523820 2523145 1 0 0 1 0 clinfo 1958102 2760945 1 1 0 0 0 sh 1572938 2285709 1 1 0 0 0 ======= === === ===== ====== ==== ====== ===== Total 12000 11994 0 6 0     Process FREQ Total Kernel User Shared Other ======= === ===== ====== ==== ====== ===== wait 4 11957 11957 0 0 0 syncd 1 31 31 0 0 0 caiUxOs 1 3 0 0 3 0 netm 1 1 1 0 0 0 hats_nim 1 1 0 0 1 0 snmpd64 1 1 1 0 0 0 rpc.lockd 1 1 1 0 0 0 tprof 1 1 0 0 1 0 trclogio 1 1 1 0 0 0 trace 1 1 0 0 1 0 clinfo 1 1 1 0 0 0 sh 1 1 1 0 0 0 ======= === ===== ====== ==== ====== ===== Total 15 12000 11994 0 6 0   在这里,对wait进程作一点补充说明。 在AIX 5L下,你用ps aux会发现有一些root的wait进程 #ps aux |head -20 USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND oracle 266354 5.7 0.0 50136 27524 - A 15:40:35 0:32 oracleora92 (LOC root 17214 3.1 0.0 40 40 - A Jul 04 24793:53 wait root 16946 3.1 0.0 40 40 - A Jul 04 24633:59 wait root 16678 3.1 0.0 40 40 - A Jul 04 24600:21 wait root 53274 3.1 0.0 40 40 - A Jul 04 24397:54 wait root 286 3.1 0.0 40 40 - A Jul 04 24371:55 wait root 8196 3.0 0.0 40 40 - A Jul 04 24312:40 wait root 822 3.0 0.0 40 40 - A Jul 04 24303:36 wait root 554 3.0 0.0 40 40 - A Jul 04 24261:50 wait root 20776 2.7 0.0 40 40 - A Jul 04 21502:46 wait root 57372 2.7 0.0 40 40 - A Jul 04 21439:31 wait root 49176 2.7 0.0 40 40 - A Jul 04 21423:47 wait root 21044 2.7 0.0 40 40 - A Jul 04 21398:24 wait root 12848 2.7 0.0 40 40 - A Jul 04 21357:07 wait root 21312 2.7 0.0 40 40 - A Jul 04 21324:26 wait root 12580 2.7 0.0 40 40 - A Jul 04 21293:06 wait root 13116 2.7 0.0 40 40 - A Jul 04 21195:47 wait oracle 344612 0.3 0.0 57588 34976 - A Jul 04 2663:08 ora_j000_ora92 oracle 430408 0.3 0.0 55908 33296 - A Jul 04 2220:57 ora_j001_ora92   wait就是CPU空闲的时候运行的空闲进程,AIX4上叫kproc。所以这个进程占用越大,表示机器越空闲。Wait进程的数量是由机器上的逻辑CPU的个数决定的,有几个逻辑CPU,就有几个wait进程.   1.8.5 5、ps 这个命令使用本身也比较复杂,在这里只介绍如何查看cpu占用最高的进程。使用举例如下: #ps aux | head -25 USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND root 17214 3.1 0.0 40 40 - A Jul 04 25578:42 wait root 16946 3.1 0.0 40 40 - A Jul 04 25415:54 wait root 16678 3.1 0.0 40 40 - A Jul 04 25377:03 wait root 53274 3.1 0.0 40 40 - A Jul 04 25170:12 wait root 286 3.1 0.0 40 40 - A Jul 04 25144:00 wait root 8196 3.0 0.0 40 40 - A Jul 04 25082:32 wait root 822 3.0 0.0 40 40 - A Jul 04 25072:25 wait root 554 3.0 0.0 40 40 - A Jul 04 25034:14 wait root 20776 2.7 0.0 40 40 - A Jul 04 22181:27 wait root 57372 2.7 0.0 40 40 - A Jul 04 22118:00 wait root 49176 2.7 0.0 40 40 - A Jul 04 22102:02 wait root 21044 2.7 0.0 40 40 - A Jul 04 22077:18 wait root 12848 2.7 0.0 40 40 - A Jul 04 22036:44 wait root 21312 2.7 0.0 40 40 - A Jul 04 21998:53 wait root 12580 2.7 0.0 40 40 - A Jul 04 21967:17 wait root 13116 2.7 0.0 40 40 - A Jul 04 21865:51 wait oracle 344612 0.3 0.0 56372 33852 - A Jul 04 2707:30 ora_j000_ora92 oracle 430408 0.3 0.0 55916 33396 - A Jul 04 2266:20 ora_j001_ora92 oracle 365092 0.2 0.0 56184 33664 - A Jul 04 1765:58 ora_j002_ora92 oracle 442430 0.2 0.0 56092 33572 - A Jul 04 1426:40 ora_j003_ora92 oracle 385606 0.1 0.0 55984 33464 - A Jul 05 1159:17 ora_j004_ora92 oracle 413856 0.1 0.0 50520 28000 - A Jul 23 543:31 oracleora92 (LOC oracle 143668 0.1 0.0 50528 28008 - A Jul 13 833:21 oracleora92 (LOC oracle 369230 0.1 0.0 56600 34080 - A Jul 05 806:36 ora_j005_ora92 在这个输出结果中,排在前面的是16个root用户的wait进程,这其实是CPU空闲的时候运行的空闲进程,之前已作说明。 所以CPU最高的几个进程其实是下面的ORACLE用户的ora_j00*进程,这是ORACLE的job进程。在这里,这些进程的开销很小。如果ORACLE的进程开销比较大,我们可以用如下的方法来查询具体的进程在干什么事情,例如我们要查询进程ora_j000_ora92,PID=344612,可以使用下面的方法: $su – oracle SQL>sqlplus “/as sysdba” SQL>oradebug setospid 344612 SQL>oradebug event 10046 trace name context forever, level 8 SQL>oradebug tracefile_name –这个命令我们获得输出文件的绝对路径和文件名 SQL>oradebug event 10046 trace name context off $tkprof /opt/oracle/app/oracle/admin/ora92/bdump/ora92_j000_344612.trc tracepid.txt $more tracepid.txt 在tracepid.txt中,我们就可以看到这个进程中具体运行的语句、过程等,以及所有的SQL的cpu消耗、物理读、逻辑读、执行计划等信息。   另外,我们也可以执行下面的语句查看进程具体运行的SQL语句的文本: SELECT /*+ ORDERED */ sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN ( SELECT DECODE (sql_hash_value,0, prev_hash_value,sql_hash_value), DECODE (sql_hash_value,0, prev_sql_addr, sql_address) FROM v$session b WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = '&pid')) ORDER BY piece ASC   1.8.6 6、解决CPU占用的惩罚机制nice和renice 指定和修改命令的优先级。 系统中运行的每个进程都有一个优先级,我们可以用ps命令看到,这个优先级为PRI,PRI的值越小,优先级越高,能占用更多的CPU时间片。系统默认的PRI为60,我们可以通过nice命令和renice命令来改变一个进程的优先级,从而控制进程对CPU时间片的占用。 任何一个用户都可以使用nice命令来使他的进程以低于系统默认的pri运行。但是只有root用户才可以使进程以高于默认的pri运行。 我们先来看一下nice命令的使用方法: #nice –n -5 vmstat 2 10 >vmstat.out # ps -el F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 200001 A 0 704738 1523728 0 55 15 aee1400 544 f100009e63c23e30 pts/1 0:00 vmstat 指定程序以nice值-5开始运行。程序开始后,nice的值为15,PRI的值为55。 nice命令可以指定的范围为-20 (最高优先级)到 20 (最低优先级)。在AIX5.3中,默认的nice为20。 # vmstat 2 10 >vmstat.out # ps -el F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 200001 A 0 704740 1523728 0 60 20 32ec6400 472 f100009e63c23e30 pts/1 0:00 vmstat64 可以看到默认的情况下,系统使用的nice=20,pri=60 。   实际上,在使用nice指定的时候,我们也可以使用超出闭区间[-20,20]的值,比如: nice –n -33 vmstat 2 10 >vmstat.out # ps -el F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD   200001 A 0 319652 1523728 0 40 0 82ef0400 544 f100009e63c23e30 pts/1 0:00 vmstat64 上例中,我们指定的nice小于-20,得到最高的优先级(pri=40)。反之,如果我们指定nice的值超过20,比如nice=21,我们将得到最低的优先级值pri=100。   renice不能在具有固定优先级的进程上使用。非root用户可以在一个或多个运行进程的nice值上加一个指定的值,但不能从中减去指定的值。也就是只能降低进程的优先级,而不能增加优先级。 renice -n -10 pidnumber ,将指定的进程nice值减小10。 renice -n +5 pidnumber ,将指定的进程nice值增加5。 根据nice值的不同取值,这里renice的值可以取值的范围是闭区间[-40,40 ]。为什么取值范围是这个呢?我们可以这样来理解,通过ps –l命令,我们可以看到NI的取值范围是闭区间[0,40],我们使用renice需要改变的也就是整个值,考虑两个极端的情况,假如现在为0,我们要把它改到40,就必须得renice –n 40,如果现在是40,我们要把它改为0,则renice的值就得是-40了。 当然,跟nice一样,在这里renice的值在命中使用的时候也可以超出这个闭区间,不会报错,但有效的结果只落在这个闭区间内。 # ps l 1630282 FSUID PID PPID C PRI NI ADDR SZ RSS WCHAN TTY TIME CMD 200001 A 0 1630282 680062 0 100 40 413e8400 472 484 EVENT pts/1 0:00 v # renice -n -30 1630282 # ps l 1630282 FSUID PID PPID C PRI NI ADDR SZ RSS WCHAN TTY TIME CMD 200001 A 0 1630282 680062 0 50 10 413e8400 472 484 EVENT pts/1 0:00 v   我们可以总结一下,pri值的取值公式大概如下: 优先级值(PRI)= 基本优先级(60)+nice损失 + 基于最近CPU使用情况的CPU损失 总的来说nice值越小,进程的优先级越高,能分配到更多的cpu时间片。反之,也成立。   1.8.7 7、小结 对于系统cpu的监控,建议: 1)使用vmstat进行分析 2)sar –P ALL 1 10 分析,多个cpu间的负载是否平衡 3)ps aux 查看 4)tprof查看更详细的信息 1.9 AIX 5.3主机性能评估-NETWORK性能评估 网络的性能可以通过以下一些方法进行监控和优化:   1.9.1 1、ping命令查看网络的连通性 如果一旦发现网络发现问题,我们最常规的使用方法就是使用ping命令来检查网络的连通情况。   # ping 10.33.102.107 PING 10.33.102.107: (10.33.102.107): 56 data bytes 64 bytes from 10.33.102.107: icmp_seq=0 ttl=255 time=4 ms 64 bytes from 10.33.102.107: icmp_seq=1 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=2 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=3 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=4 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=5 ttl=255 time=0 ms IXDBA.NET技术社区 64 bytes from 10.33.102.107: icmp_seq=6 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=7 ttl=255 time=0 ms ^C ----10.33.102.107 PING Statistics---- 8 packets transmitted, 8 packets received, 0% packet loss 上面的结果中,最后一行是一个总结,0% packet loss可以检查网络的质量,丢包率。从time=0 ms,我们也可以来判断这两台主机之间网络传送的延时情况。     1.9.2 2、netstat –i检查网络的接口 这个命令可以用来检查网络的接口情况。 #netstat -i Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll en0 1500 link#2 0.d.60.b.98.e2 5022475 0 4643590 0 0 en0 1500 10.33.102.9 oracle1_boot 5022475 0 4643590 0 0 en2 1500 link#3 0.d.60.b.96.78 4925323 0 4515364 0 0 en2 1500 192.100.10 oracle1_stb 4925323 0 4515364 0 0 en3 1500 link#4 0.2.55.cf.4d.b9 0 0 7 0 0 en3 1500 10.0.2 oracle1 0 0 7 0 0 lo0 16896 link#1 4789337 0 4791656 0 0 lo0 16896 127 loopback 4789337 0 4791656 0 0 lo0 16896 ::1 4789337 0 4791656 0 0 对于上述的输出结果,说明如下: ¨         name 接口名称 ¨         Mtu 最大传输单元,单位字节 ¨         Ipkts 接收到的信息包总数量 ¨         Ierrs 接收失败的包总数,比如,畸形的信息包、校验和错误或是设备驱动程序中的缓冲空间不足。 ¨         Opkts 发送的信息包总数量 www.ixdba.net ¨         Oerrs 发送失败的包总数,比如,主机连接错误或者适配器输出队列超限。 ¨         Coll 检测到包冲突的次数   如果Ierrs/ Ipkts超过1%,就需要通过netstat –m来检查存储器的内存使用情况。 如果Oerrs/ Opkts超过1%,就需要为这个接口增加发送队列的大小(xmt_que_size),xmt_que_size的值可以通过下面的命令来检查: #lsattr –El adapter 如果Coll/Opkts超过10%,则网络的使用率比较高,有必要重新组合或是分区,使用netstat –v或者 enstat 命令可以确定冲突的比率。     1.9.3 3、netstat –r检查主机的路由情况 Netstat –r可以用来检查主机的路由情况。在这里,default表示的是默认路由。在很多网络不通的时候,我们可以首先检查路由表的情况,如果路由表不存在太多的问题,可以再使用traceroute命令来检查包的传送路径,从而定位网络问题。 #netstat -r Routing tables Destination Gateway Flags Refs Use If Exp Groups   Route Tree for Protocol Family 2 (Internet): default 10.33.102.97 UG 316 597250728 en7 - - 10.33.102.96 jsdxh_db_svc UHSb 0 0 en7 - - => 10.33.102.96/28 jsdxh_db_svc U 195 2288404800 en7 - - jsdxh_db_svc loopback UGHS 0 635942 lo0 - - 10.33.102.111 jsdxh_db_svc UHSb 0 261 en7 - - 127/8 loopback U 44 8771083 lo0 - - 192.168.0.0 jsdxh_db01_stby UHSb 0 0 en9 - - => 192.168.0/28 jsdxh_db01_stby U 2 3781828 en9 - - jsdxh_db01_stby loopback UGHS 0 2463802 lo0 - - 192.168.0.15 jsdxh_db01_stby UHSb 0 272 en9 - -   Route Tree for Protocol Family 24 (Internet v6): IXDBA.NET技术社区 ::1 ::1 UH 0 48 lo0 - - 关于输出结果的一点说明: Destination:表示路由的目的地。Default则表示该条路由位默认路由。在有些系统上,则使用0.0.0.0来表示默认路由。 Gateway:网关 Flag:flag的字段值比较多,不一一说明。这里的U表示up。G表示路由至网关。H表示路由至主机而不是网络。S表示手工添加。b表示该路由为广播地址。 Refs:给出当前活动使用的路由数目。面向连接协议在连接持续时间内保留单独的路由,而无连接协议在发送给同一目标时获取路由。 Use:提供使用该路由发送的信息包数目的计数。 If:表示本路由利用的网络接口。其中lo0表示回环地址。En7表示以太网口7。 Exp:该字段无效。 Group:该字段无效。   下面是给出的一个traceroute示例: # traceroute 10.33.102.107 trying to get source for 10.33.102.107 source should be 10.33.102.105 traceroute to 10.33.102.107 (10.33.102.107) from 10.33.102.105 (10.33.102.105), 30 hops max outgoing MTU = 1500 1 oracle_svc (10.33.102.107) 1 ms 0 ms 0 ms       Netstat命令的其他用法,简单介绍。 Netstat –t命令可以用来检查外部链接的情况,在这里可以看到链路所使用协议,以及端口情况。 # netstat -ta |grep –v loopback | more Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp4 0 0 *.daytime *.* LISTEN tcp 0 0 *.ftp *.* LISTEN tcp 0 0 *.telnet *.* LISTEN tcp4 0 0 *.smtp *.* LISTEN tcp4 0 0 *.time *.* LISTEN tcp4 0 0 *.sunrpc *.* LISTEN tcp4 0 0 *.smux *.* LISTEN IXDBA.NET技术社区 tcp 0 0 *.exec *.* LISTEN tcp 0 0 *.login *.* LISTEN tcp 0 0 *.shell *.* LISTEN tcp4 0 0 *.rmc *.* LISTEN tcp4 0 0 jsdxh_db_svc.ncube-lm 10.37.131.7.iad1 ESTABLISHED tcp4 0 13 jsdxh_db_svc.ncube-lm 10.33.102.104.nicelink ESTABLISHED tcp4 0 0 jsdxh_db_svc.ncube-lm 10.33.102.104.cnrproto ESTABLISHED tcp4 0 0 jsdxh_db_svc.ncube-lm 10.33.102.104.lmsocial ESTABLISHED tcp4 0 0 jsdxh_db_svc.ncube-lm 10.34.131.74.prolink ESTABLISHED tcp4 0 0 jsdxh_db_svc.ncube-lm 10.33.102.104.icp ESTABLISHED tcp4 0 0 jsdxh_db_svc.ncube-lm 10.33.102.104.1124 ESTABLISHED tcp4 0 0 jsdxh_db_svc.ncube-lm 10.33.102.104.1125 ESTABLISHED tcp4 0 0 jsdxh_db_svc.ncube-lm 10.33.102.104.1126 ESTABLISHED IXDBA.NET技术社区 tcp4 0 0 jsdxh_db_svc.ncube-lm 10.33.102.104.1127 ESTABLISHED   1.9.4 4、netpmon netpmon命令用于监控与网络有关的I/0及CPU的使用情况。 以root 身份运行下面的命令,可以找出进程使用的CPU时间,以及其中与网络有关的代码使用的CPU时间: # netpmon -o /tmp/netpmon.out -O cpu -v; sleep 30; trcstop   此命令运行30 秒钟,并在/tmp目录下生成文件 netpmon.out。其中字段 CPU Time 为进程使用CPU 的时间总值,CPU%对应其百分比,Network CPU% 为进程中与网络有关的代码所占用的CPU百分比。如下所示: TIME: 30.002476450 TRACE OFF   # more /tmp/netpmon.out Wed Aug 15 16:15:15 2007 System: AIX oracle2 Node: 5 Machine: 005073CD4C00   trace -a -T 256000 -o - -j 000,000,001,002,003,005,006,106,10C,139,134,135,100,200,102,103,101,104,465,467,46A, 00A,256,255,262,26A,26B,32D,32E,2A7,2A8,351,352,320,321,30A,30B,330,331,334,335,2C3,2C4,2A4,2A5,2E6,2E7,2DA,2DB ,2EA,2EB,252,216,211 TIME: 0.000000000 TRACE ON pid 1662992 tid 0x2a8015 TIME: 30.002476450 TRACE OFF Hook counts ----------------------------- TrcOn: 1 TrcOff: 1 TrcHdr: 4 TrcTWrap: 187 Dispatch: 26204 Idle: 46017 Fork: 1 Exec: 1 Exit: 8 Flih: 25479 Resume: 82837 Slih: 10655 SlihRet: 10655 SVCEnter: 321792 SVCReturn: 321731 Createthread: 1 TrcUtil: 1001 IXDBA.NET技术社区 IfEn: 9257 Socket: 113004   968836 hooks processed (incl. 1194 utility) 30.002 secs in measured interval   ========================================================================   Process CPU Usage Statistics: ----------------------------- Network Process PID CPU Time CPU % CPU % ---------------------------------------------------------- oracle 1745142 1.1525 0.960 0.000 UNKNOWN 2113548 0.6105 0.509 0.000 oracle 1196136 0.5308 0.442 0.009 oracle 843984 0.3940 0.328 0.007 oracle 1548420 0.3821 0.318 0.006 oracle 1171498 0.3382 0.282 0.006 oracle 1302590 0.3291 0.274 0.005 oracle 974996 0.3278 0.273 0.005 oracle 1507490 0.3224 0.269 0.005 oracle 1253426 0.3046 0.254 0.005 oracle 892972 0.2259 0.188 0.004 oracle 1327172 0.2098 0.175 0.003 oracle 1204434 0.1992 0.166 0.003 oracle 925944 0.1913 0.159 0.003 oracle 2023594 0.1903 0.159 0.003 IXDBA.NET技术社区 oracle 483440 0.1849 0.154 0.003 oracle 458788 0.1749 0.146 0.003 oracle 1859812 0.1743 0.145 0.003 oracle 721084 0.1666 0.139 0.003 …     1.9.5 5、其他一些常用的命令   Arp Route Ifconfig Nslookup等等。 这些命令,在这里不再一一介绍,有兴趣的可以查看相关资料。 1.10 AIX网络诊断及解决现场实例 问题:有两台aix的测试机器,一台做应用,一台做数据库,都在同一个网段下(无双机),其中应用网络没有问题,而数据库这台网络有问题,内网下载只有30几K。 解决方法:对比法 由于这两台机器属于同一网段,机型完全一样,可以将两台机器的网络设置进行细致的对比,看看有何差异,然后改之。 使用netstat -v ent0 | grep -p "Specific Statistics"命令分别查看两台机器 应用: netstat -v ent0 | grep -p "Specific Statistics" 10/100 Mbps Ethernet PCI Adapter II (1410ff01) Specific Statistics: -------------------------------------------------------------------- Link Status: Up Media Speed Selected: Auto negotiation Media Speed Running: 100 Mbps Full Duplex Receive Pool Buffer Size: 1024 Free Receive Pool Buffers: 1024 No Receive Pool Buffer Errors: 0 Receive Buffer Too Small Errors: 0 Entries to transmit timeout routine: 0 Transmit IPsec packets: 0 Transmit IPsec packets dropped: 0 Receive IPsec packets: 0 Receive IPsec packets dropped: 0 Inbound IPsec SA offload count: 0 Transmit Large Send packets: 0 Transmit Large Send packets dropped: 0 Packets with Transmit collisions: 1 collisions: 0           6 collisions: 0          11 collisions: 0 2 collisions: 0           7 collisions: 0          12 collisions: 0 IXDBA.NET技术社区 3 collisions: 0           8 collisions: 0          13 collisions: 0 4 collisions: 0           9 collisions: 0          14 collisions: 0 5 collisions: 0          10 collisions: 0          15 collisions: 0 数据库: netstat -v ent0 | grep -p "Specific Statistics" 10/100 Mbps Ethernet PCI Adapter II (1410ff01) Specific Statistics: -------------------------------------------------------------------- Link Status: Up Media Speed Selected: 100 Mbps Half Duplex Media Speed Running: 100 Mbps Half Duplex Receive Pool Buffer Size: 1024 Free Receive Pool Buffers: 1024 No Receive Pool Buffer Errors: 0 Receive Buffer Too Small Errors: 0 Entries to transmit timeout routine: 0 Transmit IPsec packets: 0 Transmit IPsec packets dropped: 0 Receive IPsec packets: 0 Receive IPsec packets dropped: 0 Inbound IPsec SA offload count: 0 Transmit Large Send packets: 0 Transmit Large Send packets dropped: 0 Packets with Transmit collisions: 1 collisions: 233543413   6 collisions: 0          11 collisions: 0 2 collisions: 0           7 collisions: 0          12 collisions: 0 3 collisions: 0           8 collisions: 0          13 collisions: 0 4 collisions: 0           9 collisions: 0          14 collisions: 0 5 collisions: 0          10 collisions: 0          15 collisions: 0 仔细对比发现数据库这台显然是双工模式与应用这台不同,应用的机器是自适应的,运行时是100M全双工模式,而数据库的机器限制为100M半双工模式,现在就是要将数据库这台改成与应用一样 更改双工模式的命令为smitty chgenet 但是在此之前要将需要更改的网卡down掉,以及所有经过此网卡的服务停止 步骤如下: ifconfig -a 输出: en0: flags=5e080863,80         inet 10.100.10.6 netmask 0xffffff00 broadcast 10.100.10.255 再输入: ifconfig en0 down ifconfig en0 detach smitty chgennt 输出: IXDBA.NET技术社区                                                       [Entry Fields]   Ethernet Adapter                                    ent0   Description                                         10/100 Mbps Ethernet PCI Adapter II (1410ff01)   Status                                              Available   Location                                            1L-08   Transmit descriptor queue size                     [512]                                                                       +#  Receive descriptor queue size                      [512]                                                                       +# Software transmit queue size                       [8192]                                                                      +#   Receive buffer pool size                           [1024]                                                                      +#   Media Speed                                         Auto_Negotiation                                                           +   IPsec Offload                                       no                                                                         +   Enable hardware transmit and receive checksum       yes                                                                        +   Enable TCP Large Send Offload                       no                                                                         + Enable Link Polling                                 no                                                                         +   Time interval for Link Polling                     [500]                                                                       +#   Enable ALTERNATE ETHERNET address                   no                                                                         +   ALTERNATE ETHERNET address                         [0x000000000000]                                                            +   Apply change to DATABASE only                       no                                                                         + 更改之后需要重新设置默认网关(原来的会丢失) smitty tcpip Minimum Configuration & Startup 输出: HOSTNAME                                           [TEST1-CRM-APP-CLS] * Internet ADDRESS (dotted decimal)                  [10.100.10.6]   Network MASK (dotted decimal)                      [255.255.255.0] * Network INTERFACE                                   en0   NAMESERVER            Internet ADDRESS (dotted decimal)         []            DOMAIN Name                               []   Default Gateway        Address (dotted decimal or symbolic name)     [10.100.10.1]        Cost                                          [0]                                                                          #        Do Active Dead Gateway Detection?              no                                                                         +   Your CABLE Type                                     N/A                                                                        + START TCP/IP daemons Now                            no                                                                         + 最后将网卡启用 ifconfig en0 up 问题得到解决!!!! 1.11 AIX 5.3主机性能评估-topas的使用说明 topas命令用于监控各种系统资源,如CPU的使用情况,CPU事件和队列,内存和换页空间的使用,磁盘性能,网络性能以及NFS统计等。它还会报告指派给不同WLM类的进程对系统资源的消耗情况。它还能报告系统中最热门的进程和工作量管理器(WLM)的热门类。有关WLM类信息只有在WLM激活时才会显示。topas命令将热门进程定义为那些使用大量CPU时间的进程。topas命令没有作日志的选项,所有信息都是实时的。 topas命令利用System Performance Measurement Interface(SPMI)API获得有关信息。正是因为通过SPMI API,使系统开销保持在最小程度。topas命令使用perfstat库调用访问perfstat内核扩展。 IXDBA.NET技术社区 topas命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用。内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。   下面是该命令的语法格式: topas [-d number-of-monitored-hot-disks][-h] [-i monitoring-interval_in_seconds] [-n number-of-monitored-hot-network-interfaces] [-p number-of-monitored-hot-processes] [-w number-of-monitored-hot-WLM classes] [-c number-of-monitored-hot-CPUs] [-P|-W]   -d 指定要受监视的磁盘数目。缺省2个磁盘,在屏幕显示空间足够的情况下,全部显示。 -i 以秒为单位设置监视的时间间隔。缺省2秒。      ? d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 ? q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 ? S 指定累计模式。 ? s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 ? i 使top不显示任何闲置或者僵死进程。 ? c 显示整个命令行而不只是显示命令名。   top命令显示的项目很多,默认值是每5秒更新一次,当然这是可以设置的。显示的各项目为:   uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值(最近1秒,5秒,15秒的负载值)。   processes 自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的,休眠的,停止的等很多种类。进程和状态显示可以通过交互命令t来实现。   CPU states 显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。 PID(Process ID):进程标示号。 USER:进程所有者的用户名。 PR:进程的优先级别。 NI:进程的优先级别数值。 VIRT:进程占用的虚拟内存值。 RES:进程占用的物理内存值。 SHR:进程使用的共享内存值。 S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。   Mem 内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。   Swap 交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。   PID 每个进程的ID。   PPID 每个进程的父进程ID。   UID 每个进程所有者的UID 。   USER 每个进程所有者的用户名。   PRI 每个进程的优先级别。 NI 该进程的优先级值。   SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。   TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。   DSIZE 数据和堆栈的大小。   TRS 文本驻留大小。   D 被标记为“不干净”的页项目。   LIB 使用的库页的大小。对于ELF进程没有作用。   RES 该进程占用的物理内存的总数量,单位是KB。   SHARE 该进程使用共享内存的数量。 www.ixdba.net   STAT 该进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态。   TIME 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。   %CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。   %MEM 该进程占用的物理内存占总内存的百分比。   COMMAND 该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行。   下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。   $#@60;空格立即刷新显示。   Ctrl+L 擦除并且重写屏幕。   h或者? 显示帮助画面,给出一些简短的命令总结说明。   k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。   i 忽略闲置和僵死进程。这是一个开关式命令。   q 退出程序。   r 重新安排一个进程的优先级别。   S 切换到累计模式。   s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。   f或者F 从当前显示中添加或者删除项目。   o或者O 改变显示项目的顺序。   l 切换显示平均负载和启动时间信息。   m 切换显示内存信息。   t 切换显示进程和CPU状态信息。   c 切换显示命令名称和完整命令行。   M 根据驻留内存大小进行排序。   P 根据CPU使用百分比大小进行排序。   T 根据时间/累计时间进行排序。 W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。 1.12 AIX 5.3主机性能评估-结合案例分析 在这个案例中,主要重点就io这一块作分析。对于其他的,在这里就不作讨论。 应用环境: 两台P570作HA(Rotating方式),AIX 5.3 安装oracle 9206,磁阵DS4300,14块盘,6块作raid10为hdisk4,另外8块盘作raid10为hdisk5 两台P630作HA(Rotating方式),AIX 5.1 安装oracle 9206,磁阵7133 两个数据库各分担一定的功能。P570压力比较大。   性能问题: 最近,P570数据库上的数据库性能急剧下降,报表统计跑将近24个小时才能完成,严重影响白天正常的业务,给主机带来比较大的性能负担。   检查过程(主要在P570上操作): 1、使用topas查看一下操作系统的load情况。结果没想到topas无法运行了,得到的结果如下,根本无法刷新数据。 Topas Monitor for host: jsdxh_db01 EVENTS/QUEUES FILE/TTY IXDBA.NET技术社区 Thu Oct 25 13:58:32 2007 Interval: 2 Cswitch Readch Syscall Writech Kernel | | Reads Rawin User | | Writes Ttyout Wait | | Forks Igets Idle | | Execs Namei Runqueue Dirblk Network KBPS I-Pack O-Pack KB-In KB-Out Waitqueue PAGING MEMORY Faults Real,MB Steals % Comp Disk Busy% KBPS TPS KB-Read KB-Writ PgspIn % Noncomp PgspOut % Client PageIn PageOut PAGING SPACE Sios Size,MB IXDBA.NET社区论坛 % Used NFS (calls/sec) % Free ServerV2 ClientV2 Press: ServerV3 "h" for help ClientV3 "q" to quit 2、安装nmon_aix53(操作系统为5.3),结果nmon_aix53运行也报错。 #./nmon_aix53 ERROR: Assert Failure in file="nmon11.c" in function="main" at line=3239 ERROR: Reason=NULL pointer ERROR: Expression=[[q->procs = MALLOC(sizeof(struct procentry64 ) * n )]] ERROR: errno=12 ERROR: errno means : Not enough space 3、检查进程情况 #ps -ef | wc -l www.ixdba.net 9947 竟然总共已经产生了9000多个进程。在这众多的进程中可以发现有很多的defunct进程。 #ps -ef |grep defunct | wc -l 9331 ##ps -ef | grep defunct | more root 159952 1 0 0:00 root 172052 1 0 0:00 root 225294 1 1 0:00 root 262236 1 0 0:00 root 290902 1 0 0:00 在网上随便查一下defunct,就可以知道,这是孤儿进程。已经找不到父进程,所以把init(PID 1)作为他的父进程。上面的结果中就是PPID=1。孤儿进程无法用kill -9 来清除,即使是root用户也不行,只能重启。这些孤儿进程一般情况下都是由于不当的fork ()/execve()造成的。 继续检查系统,不知道这么多的孤儿进程是哪个产生的。看一下主机系统的报错情况。 #errpt |more IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION A63BEB70 1025140007 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED A63BEB70 1025133007 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED A63BEB70 1025130007 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED A63BEB70 1025123007 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED A63BEB70 1025120007 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED 在这里,可以看到频繁的这个报错。基本每隔半个小时报错一次。再检查详细的错误。可以定位到原来是由于一个网管监控软件造成的这个错误。基本也可以判断,由于整个软件的不当的fork调用,导致了数量惊人的孤儿进程。 现在孤儿进程的问题基本确定了,但是这个孤儿进程到目前为止,对系统造成的影响有多大?网上搜了一把,孤儿进程一般不占用内存,不占用空间,只不过是在进程列表中占了一个位置,所以并不会对系统性能产生太严重的影响。当然,如果任期发展,有可能就会使主机hang住。在这里,网管系统是以root用户运行的,进程数的限制非常大。所以,这里孤儿进程应该只是一个安全隐患,并不是对当前性能造成影响的原因。   4、检查cpu的使用情况, www.ixdba.net #vmstat 1 10 System configuration: lcpu=16 mem=23552MB   kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 4 0 3533226 2251446 0 0 0 0 0 0 3167 323907 7321 22 9 32 37 1 0 3533229 2251443 0 0 0 0 0 0 1863 313913 4784 18 8 40 34 2 0 3533229 2251443 0 0 0 0 0 0 3004 319720 6939 19 9 35 38 Cpu的使用率基本在65%左右,wa基本在35%到40%,io等待比较严重。 5、再继续检查一下磁盘的IO情况 #iostat 1 2 System configuration: lcpu=16 drives=11 paths=4 vdisks=0 tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 60.0 26.6 9.6 38.4 25.4 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1 37.0 350.0 70.0 0 350 hdisk0 31.0 354.0 70.0 0 354 hdisk2 0.0 0.0 0.0 0 0 hdisk3 0.0 0.0 0.0 0 0 dac0 0.0 9780.0 1199.0 2000 7780 dac0-utm 0.0 0.0 0.0 0 0 dac1 0.0 0.0 0.0 0 0 www.ixdba.net dac1-utm 0.0 0.0 0.0 0 0 hdisk4 49.0 3141.0 389.0 520 2621 hdisk5 99.0 6639.0 810.0 1480 5159 cd0 0.0 0.0 0.0 0 0   tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 902.0 30.2 8.4 38.9 22.5 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1 0.0 0.0 0.0 0 0 hdisk0 0.0 0.0 0.0 0 0 hdisk2 0.0 0.0 0.0 0 0 hdisk3 0.0 0.0 0.0 0 0 dac0 0.0 13080.0 1497.0 1616 11464 dac0-utm 0.0 0.0 0.0 0 0 www.ixdba.net dac1 0.0 0.0 0.0 0 0 dac1-utm 0.0 0.0 0.0 0 0 hdisk4 63.0 3866.0 405.0 296 3570 hdisk5 100.0 9214.0 1092.0 1320 7894 cd0 0.0 0.0 0.0 0 0 在上面的两份报告中,可以发现,系统对磁盘的负载不均。Hdisk5基本上长期维持在100%,而hdisk4则基本上维持在50%左右。再检查这两个hdisk的详细情况: #lspv hdisk5 PHYSICAL VOLUME: hdisk5 VOLUME GROUP: oravg PV IDENTIFIER: 00c2c1eb0bcfbdd4 VG IDENTIFIER 00c2c1eb00004c0000000110153a551d PV STATE: active STALE PARTITIONS: 0 ALLOCATABLE: yes PP SIZE: 64 megabyte(s) LOGICAL VOLUMES: 120 TOTAL PPs: 8718 (557952 megabytes) VG DESCRIPTORS: 1 FREE PPs: 1206 (77184 megabytes) HOT SPARE: no USED PPs: 7512 (480768 megabytes) MAX REQUEST: 1 megabyte www.ixdba.net FREE DISTRIBUTION: 00..00..00..00..1206 USED DISTRIBUTION: 1744..1744..1743..1743..538   #lspv hdisk4 PHYSICAL VOLUME: hdisk4 VOLUME GROUP: oravg PV IDENTIFIER: 00c2c1eb0bcfb8b3 VG IDENTIFIER 00c2c1eb00004c0000000110153a551d PV STATE: active STALE PARTITIONS: 0 ALLOCATABLE: yes PP SIZE: 64 megabyte(s) LOGICAL VOLUMES: 128 TOTAL PPs: 6538 (418432 megabytes) VG DESCRIPTORS: 2 FREE PPs: 100 (6400 megabytes) HOT SPARE: no USED PPs: 6438 (412032 megabytes) MAX REQUEST: 1 megabyte FREE DISTRIBUTION: 00..00..00..00..100 USED DISTRIBUTION: 1308..1308..1307..1307..1208   6、检查一下内存, #lsps -a Page Space Physical Volume Volume Group Size %Used Active Auto Type paging00 hdisk2 rootvg 12288MB 1 yes yes lv hd6 hdisk0 rootvg 12288MB 1 yes yes lv #svmon -G -i 1 5 size inuse free pin virtual memory 6029312 3780159 2249153 446200 3535574 IXDBA.NET社区论坛 pg space 6291456 17540   work pers clnt pin 445938 262 0 in use 3535574 244585 0 size inuse free pin virtual memory 6029312 3780168 2249144 446205 3535578 pg space 6291456 17540 这台机器内存比较大,24G物理内存,从这里看,free的空间也挺多,交换区也基本没怎么使用,在这里内存肯定不会造成问题。 查看一下参数设置情况: #vmo -a | grep perm maxperm = 4587812 maxperm% = 80 minperm = 1146952 minperm% = 20 #vmo -a | grep client maxclient% = 80 这里,两套系统都使用的是裸设备,这几个参数完全没必要设这么高,这会造成系统的内存争用。 P570内存比较大,这种情况还没多大影响,但是在P630上,就可以看到已经比较危险了。下面是nmon输出的一个内存统计结果,可以看到物理内存已经被消耗殆尽,交换也已经使用了62.6%的空间了。但实际上这个数据库是比较空闲的,cpu使用率不超过10%,io的量基本为0,内存的消耗实际上就是被maxperm给吃了,被文件页面的缓存给占用了。这个系统就必需要调整maxperm和minperm的值,否则如果业务繁忙起来,将导致oracle和操作系统的内存争用,影响性能。 Memory Physical PageSpace | pages/sec In Out | FileSystemCache % Used 99.4% 62.6% | to Paging Space 0.0 0.0 | Process & 13.3% % Free 0.6% 37.4% | to File System 0.0 14.2 | System 86.1% MB Used 8141.4MB 2563.9MB | Page Scans 0.0 | IXDBA.NET社区论坛 MB Free 50.6MB 1532.1MB | Page Cycles 0.0 | Free 0.6% Total(MB) 8191.9MB 4096.0MB | Page Steals 0.0 | ------ | Page Faults 18.9 | Total 100.0% ------------------------------------------------------------ | Min/Maxperm 1540MB( 19%) 6162MB( 75%) <--% of RAM | Min/Maxfree 120 128 Total Virtual 12.0GB | Pinned 7.1%   7、顺带再检查一下,网络基本没什么问题。 #netstat -i Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll IXDBA.NET技术社区 en7 1500 link#2 0.14.5e.c5.5d.2e 3133315897 0 2978410586 4 0 en7 1500 10.33.102.9 jsdxh_db_svc 3133315897 0 2978410586 4 0 en9 1500 link#3 0.14.5e.c5.64.b8 16814726 0 3897247 3 0 en9 1500 192.168.0 jsdxh_db01_stby 16814726 0 3897247 3 0 lo0 16896 link#1 13949555 0 13969868 0 0 lo0 16896 127 loopback 13949555 0 13969868 0 0 lo0 16896 ::1 13949555 0 13969868 0 0   从上面对数据库主机的操作系统层面的情况检查来看,大致可以判断造成问题主要应该是在io上面。尤其是hdisk5,hdisk5的io负担过重,可以考虑与分担一部分的量到hdisk4上,以平衡磁盘io,减少io等待。下面对数据库部分的分析也主要在io这一块,其他方面在这里就不作分析了。 下面对数据库部分的分析思路大致如下:找到读写最频繁读写的lv(有可能是表,索引或者其他的),分布其流量。   下面再对数据库来作分析。 1、检查了一下alert日志。 $ tail -100 alert_ora92.log |more Thu Oct 25 17:43:29 2007 Thread 1 advanced to log sequence 68444 Current log# 3 seq# 68444 mem# 0: /dev/rlv_redo13 Current log# 3 seq# 68444 mem# 1: /dev/rlv_redo16 Thu Oct 25 17:47:26 2007 Thread 1 advanced to log sequence 68445 www.ixdba.net Current log# 4 seq# 68445 mem# 0: /dev/rlv_redo11 Current log# 4 seq# 68445 mem# 1: /dev/rlv_redo14 Thu Oct 25 17:51:16 2007 Thread 1 advanced to log sequence 68446 Current log# 5 seq# 68446 mem# 0: /dev/rlv_redo12 Current log# 5 seq# 68446 mem# 1: /dev/rlv_redo15 从日志中看,redo切换的频率相当高,基本上是4分钟不到,就会作一次日志的切换操作。Redo是3个组,每组2个member,每个member 500M。   2、statspack Top 5 Timed Events ~~~~~~~~~~~~~~~~~~ % Total Event Waits Time (s) Ela Time -------------------------------------------- ------------ ----------- -------- log file sync 483,667 84,354 64.69 db file sequential read 469,344 35,231 27.02 enqueue 82,536 5,747 4.41 CPU time 2,150 1.65 db file parallel write 11,919 1,245 .96   从top 5事件看, 日志的写入速度太慢。这需要对应用作调整,将频繁commit的改为批量提交。但是在这里我想可能更大的原因是磁盘io的原因。检查一下相关的日志文件,以及相关redo的lv情况: SQL> / GROUP# STATUS TYPE MEMBER ---------- ------- ------- ------------------------------ 3 ONLINE /dev/rlv_redo13 3 ONLINE /dev/rlv_redo16 4 ONLINE /dev/rlv_redo11 IXDBA.NET技术社区 4 ONLINE /dev/rlv_redo14 5 ONLINE /dev/rlv_redo12 5 ONLINE /dev/rlv_redo15 SQL> ! $ lslv -l lv_redo13 lv_redo13:N/A PV COPIES IN BAND DISTRIBUTION hdisk4 008:000:000 0% 000:000:000:000:008 $ lslv -l lv_redo16 lv_redo16:N/A PV COPIES IN BAND DISTRIBUTION hdisk5 008:000:000 0% 000:000:008:000:000 $ lslv -l lv_redo11 lv_redo11:N/A PV COPIES IN BAND DISTRIBUTION hdisk4 008:000:000 0% 008:000:000:000:000 $ lslv -l lv_redo14 lv_redo14:N/A PV COPIES IN BAND DISTRIBUTION hdisk5 008:000:000 0% 008:000:000:000:000 $ lslv -l lv_redo12 lv_redo12:N/A PV COPIES IN BAND DISTRIBUTION hdisk4 008:000:000 0% 000:000:000:000:008 $ lslv -l lv_redo15 lv_redo15:N/A PV COPIES IN BAND DISTRIBUTION hdisk5 008:000:000 0% 008:000:000:000:000 www.ixdba.net 在这里,每个组中的两个member一个在hdisk4,一个在hdisk5,分布在磁盘的边缘。可以考虑改变一下内策略,将redo分布调整到磁盘的中间位置。因为本身是raid10的方式,或者干脆不要两个member,只使用其中的一个member,这个有可能带来其他的问题,如果非不得已,不考虑这种方法。   另外一个等待事件,顺序读。这个事件一般是由于不当的选择索引或者表的连接。但在这里,我想可能并不是这个原因,而主要还是磁盘繁重的io造成的。看一下物理读排序的SQL语句: SQL ordered by Reads for DB: ORA92 Instance: ora92 Snaps: 47 -48 -> End Disk Reads Threshold: 1000 CPU Elapsd Physical Reads Executions Reads per Exec %Total Time (s) Time (s) Hash Value --------------- ------------ -------------- ------ -------- --------- ---------- 170,449 206,955 0.8 33.1 279.55 20719.02 4053432766 Module: Das.exe BEGIN p_mc_sce_addsms(:p0,:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8); END ; 142,856 233,890 0.6 27.8 74.05 9616.88 1594289970 Module: Das.exe SELECT MAX(T.ACTIVE_FLAG), MAX(T.SECOND_NO) FROM T_MC_MCN_USERIN FO T WHERE T.USER_NO = :B1 AND T.PARTCOL_USERNO = SUBSTR(:B1 , - 3, 2) AND ROWNUM <= 1 我想,在这里我们对比cpu time和Elapsd time就可以发现,这里I/O等待的情况非常严重。当然,也可以进一步检查过程内语句的执行计划情况,看是否合理。在这里,还是来关注io的情况。 在表空间的io统计中,比较繁忙的表空间是: ->ordered by IOs (Reads + Writes) desc Tablespace ------------------------------ Av Av Av Av Buffer Av Buf Reads Reads/s Rd(ms) Blks/Rd Writes Writes/s Waits Wt(ms) -------------- ------- ------ ------- ------------ -------- ---------- ------ TBS_MCN_HIS_IDX 109,393 61 94.2 1.0 421,033 233 8,004 1.8 IXDBA.NET社区论坛 TBS_MCN_LOG_IDX 101,915 56 74.3 1.0 416,523 231 34,705 2.8 TBS_MCN_MAIN_IDX 110,871 61 43.9 1.0 200,902 111 15,797 1.4 TBS_MCN_MAIN_DAT 108,012 60 79.2 1.2 68,267 38 9,668 0.9   在看file io之前,先看一下hdisk4和hdisk5的各自拥有的lv情况。 #lspv -l hdisk4 hdisk4: LV NAME LPs PPs DISTRIBUTION MOUNT POINT lv_data052 64 64 00..00..64..00..00 N/A lv_data009 64 64 00..64..00..00..00 N/A lv_data053 64 64 00..00..64..00..00 N/A … #lspv -l hdisk5 hdisk5: LV NAME LPs PPs DISTRIBUTION MOUNT POINT lv_data143 64 64 00..00..64..00..00 N/A lv_data100 64 64 00..64..00..00..00 N/A IXDBA.NET社区论坛 lv_data244 64 64 00..00..00..00..64 N/A lv_data142 64 64 00..00..64..00..00 N/A lv_data099 64 64 00..64..00..00..00 N/A … 通过观察,可以分布的大致情况是,080以上的lv基本在hdisk5中,080以下lv基本都在hdisk4中。现在再对比一下file io的统计: 根据file io的统计,去计算一下,在hdisk4和hdisk5中的物理读的数量差不多是 Hdisk4:132,578 Hdisk5:261,996 Hdisk5的io量差不多就是hdisk4的两倍。这和前面iostat的统计的结果也基本差不多。 下面几个是file io统计中最繁忙的几个lv。 TBS_MCN_LOG_IDX /dev/rlv_data096 50,938 28 74.8 1.0 209,422 116 17,496 2.6 /dev/rlv_data097 50,977 28 73.7 1.0 207,101 115 17,209 3.0   TBS_MCN_MAIN_DAT /dev/rlv_data009 15,625 9 20.6 1.0 985 1 0 /dev/rlv_data010 33,026 18 18.0 1.5 26,717 15 9,658 0.7 /dev/rlv_data091 37,009 21 118.5 1.2 38,190 21 9 107.8 /dev/rlv_data092 IXDBA.NET技术社区 22,352 12 145.5 1.0 2,375 1 1 70.0   TBS_MCN_MAIN_IDX /dev/rlv_data018 26,666 15 17.6 1.0 35,333 20 4,023 1.8 /dev/rlv_data019 26,661 15 17.3 1.0 35,216 20 3,368 0.9 /dev/rlv_data020 30,600 17 17.1 1.0 93,095 52 4,274 1.1 /dev/rlv_data093 26,944 15 126.8 1.0 37,258 21 4,132 1.8   再来统计一下,表的读写情况。 select object_name,tablespace_name,value from v$segment_statistics where statistic_name='physical reads' and owner='MCNS' order by value desc ; OBJECT_NAME TABLESPACE_NAME IXDBA.NET社区论坛 VALUE PK_MC_MCN_USERINFO TBS_MCN_MAIN_IDX 66970541 T_MC_SMS_SMSNOTI TBS_MCN_LOG_DAT 51920167 IX_MC_SMS_SMSNOTI_SMID TBS_MCN_LOG_IDX 29194969 IX_MC_SMS_SMSNOTI_CREATETIME TBS_MCN_LOG_IDX 28041895 PK_MC_SMS_SMSNOTI TBS_MCN_LOG_IDX 26514549 IX_MC_SMS_SMSNOTI_SERIALID TBS_MCN_LOG_IDX 25635735 PK_MC_MCN_REC TBS_MCN_MAIN_IDX 17623694 IX_MCN_REC_TIME TBS_MCN_MAIN_IDX 13969248 T_MC_SMS_SMSNOTIHIS TBS_MCN_HIS_DAT 4455853 IX_MC_SMS_SMSNOTI_STATUS TBS_MCN_LOG_IDX 4432880 IX_RECVSMLOGHIS_ORGADDR SERVICE_HIST_IDX 4187067 IX_MC_SMS_SMSNOTI_GETFLAG TBS_MCN_LOG_IDX 3812548 T_MC_SMS_SMSNOTIHIS TBS_MCN_HIS_DAT 3758602 T_MC_SMS_SMSNOTIHIS TBS_MCN_HIS_DAT 3632276 T_MC_SMS_SMSNOTIHIS IXDBA.NET社区论坛 TBS_MCN_HIS_DAT 3585179 T_MC_SMS_SMSNOTIHIS TBS_MCN_HIS_DAT 3561865 T_MC_SMS_SMSNOTIHIS TBS_MCN_HIS_DAT 3509901 T_MC_SMS_SMSNOTIHIS TBS_MCN_HIS_DAT 3495163 T_MC_SMS_SMSNOTIHIS TBS_MCN_HIS_DAT 3480248 T_MC_SMS_SMSNOTIHIS TBS_MCN_HIS_DAT 3473926 T_MC_SMS_SMSNOTIHIS TBS_MCN_HIS_DAT 3463826 T_MC_SMS_SMSNOTIHIS TBS_MCN_HIS_DAT 3431232   通过上面的file io以及表的统计,再结合实际的业务情况,可以明确,这里最繁忙的是表空间TBS_MCN_LOG_DAT中的表T_MC_SMS_SMSNOTI以及其上位于表空间TBS_MCN_LOG_IDX中的索引。并且,这两部分全部集中再hdisk5上,所以后面的平衡io的优化操作就是将该表以及索引部分分布到hdisk4上。 1.13 AIX 5.3主机性能评估-主机日常检查脚本 主机日常检查脚本   #!/bin/sh   # # 首先载入配置文件,如果配置文件不存在,则报错退出 # SOURCE=$HOME/config/config check_source() { if [ -r $SOURCE ]; then . $SOURCE else echo "$(basename $0): Cannot locate the default setting file." exit 1 fi }   # # 定义报表头 www.ixdba.net # report_header() { HOSTIP=$(ifconfig -a | sed -n '2p' |awk '{print $2}') HOSTNAME=$(hostname) USER=`who am i | cut -d " " -f1` cat</dev/null 2>&1 else : fi   #define temp directory ,if not exist,create temp directory first. TEMP_PATH=$LOG_PATH/temp if [ -d $TEMP_PATH ];then : else mkdir $TEMP_PATH fi   # # 载入环境设置 # check_source   # # 输出报表头信息 # report_header >>$LOG_FILE     # 检查 CPU的使用情况,这里使用vmstat命令 echo "***************************************** Check CPU *****************************************">>$LOG_FILE vmstat 1 10 | awk '{print $0;if($1 ~ /^[0-9].*/) (totalcpu+=$16);(avecpu=100-totalcpu/10)}; END {print "The average usage of cpu is :"avecpu}' >$TEMP_PATH/cpu_info   cat $TEMP_PATH/cpu_info >>$LOG_FILE   cpu_used_pct=`cat $TEMP_PATH/cpu_info | grep "The average usage of cpu is" |awk -F ":" '{print $2}' ` if [ "$cpu_used_pct" -gt "$CPU_VALUE" ] ; then echo "LOG-Warnning:`date +%Y'-'%m'-'%d' '%H':'%M':'%S`, CPU负载超过阀值设置,请检查系统!!">>$LOG_FILE else echo "\t\t\t\t CPU负载正常!!">>$LOG_FILE fi   # # 内存使用监控,包括交换区的使用情况监控 ÷ # echo >>$LOG_FILE echo >>$LOG_FILE echo "***************************************** check memory useage *****************************************">>$LOG_FILE cat $TEMP_PATH/cpu_info | awk '{print $0;if($1 ~ /^[0-9].*/) (totalpi+=$6)(totalpo+=$7)};\ END {if(totalpi<10 && totalpo<10) print "\t\t\t\tMemory负载正常!!"; if(totalpi>10 || totalpo>10) print "Memory负载异常,请检 查系统!!"} '>>$LOG_FILE   # # 检查磁盘空间. ÷ # echo >>$LOG_FILE echo >>$LOG_FILE echo "***************************************** check disk space *****************************************">>$LOG_FILE df -k >>$LOG_FILE IXDBA.NET社区论坛 df -k |grep -v proc |grep -v Filesystem |awk '{x=1*$4}{print $1","$2","$3","$4","$5","$6","$7}'>$TEMP_PATH/disk_info   cat $TEMP_PATH/disk_info | grep -v '^#' | while read line do item1=$(echo $line | awk -F ',' '{print $1}') item2=$(echo $line | awk -F ',' '{print $2}') item3=$(echo $line | awk -F ',' '{print $3}') item4=$(echo $line | awk -F ',' '{print $4}' |awk -F '%' '{print $1}') item5=$(echo $line | awk -F ',' '{print $5}') item6=$(echo $line | awk -F ',' '{print $6}') item7=$(echo $line | awk -F ',' '{print $7}') if [ "$item4" -gt "$DISK_VALUE" ]; then echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`, 磁盘$item7\t剩余空间不足,请处理!!" >>$LOG_FILE else echo "\t\t\t\t 磁盘空间$item7\t\t使用正常!!" >>$LOG_FILE fi done   # # 检查磁盘的io进行监控,iostat # echo >>$LOG_FILE echo >>$LOG_FILE echo "***************************************** check iostat *****************************************">>$LOG_FILE iostat 1 3 >>$LOG_FILE   # # 对网络流量进行监控,在这里可以作一个主机列表,对每个主机ping检查网络是否连通。 # echo >>$LOG_FILE echo >>$LOG_FILE echo "***************************************** check netstat *****************************************">>$LOG_FILE netstat -i >>$LOG_FILE   # # 检查主机的告警日志 # echo >>$LOG_FILE echo >>$LOG_FILE echo "***************************************** check system err *****************************************">>$LOG_FILE errpt | head -10 >>$LOG_FILE day=`date +%D |awk -F "/" '{print $1$2}'` errpt | awk '{print $2}' | grep ^$day if [ $? -eq 0 ] ; then echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`,The system has found a error today.Please check the error report." >>$LOG_FILE else echo >>$LOG_FILE echo "\t\t\t\t There is no system error report today.System is OK!!" >>$LOG_FILE fi   # # 检查HA的运行是否正常 # echo >>$LOG_FILE echo >>$LOG_FILE echo "***************************************** check HACMP status *****************************************">>$LOG_FILE /usr/es/sbin/cluster/clstat -o > $TEMP_PATH/ha_info lssrc -g cluster >> $TEMP_PATH/ha_info cat $TEMP_PATH/ha_info >>$LOG_FILE echo >>$LOG_FILE cat $TEMP_PATH/ha_info| grep "Node:" |awk -F ':' '{print $2,$3}' | awk '{print $1,$3}' | while read line do node=$(echo $line | awk '{print $1}')"'s" echo $line |grep UP$ >/dev/null if [ "$?" -eq 0 ]; then echo "\t\t\t\t The node $node is OK!!" >>$LOG_FILE IXDBA.NET社区论坛 else echo "`date +%Y'-'%m'-'%d' '%H':'%M':'%S`,LOG-Warnning: The node $node status is DOWN ,it was terminated ." >>$LOG_FILE fi done         # # 检查数据库主要的6个进程是否正常. # echo >>$LOG_FILE echo >>$LOG_FILE echo "***************************************** check oracle process *****************************************">>$LOG_FILE ps -ef | grep ora_ | grep -v grep | awk -F '-' '{print $2}' | awk '{print $2}' >/$TEMP_PATH/ora_process_info ps -ef | grep ora_ | grep -v grep >>$LOG_FILE   # background process ckpt if [ `grep ora_ckpt_ora92 $TEMP_PATH/ora_process_info` ]; then COUNT=1 else echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`,The Process ora_ckpt_ora92 was terminated!" >>$LOG_FILE fi   # background process dbwr if [ `grep ora_dbw0_ora92 $TEMP_PATH/ora_process_info` ]; then COUNT=$((COUNT+1)) else echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`,The Process ora_dbw0_ora92 was terminated !" >>$LOG_FILE fi   # background process reco if [ `grep ora_reco_ora92 $TEMP_PATH/ora_process_info` ]; then COUNT=$((COUNT+1)) else echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`,The Process ora_reco_ora92 was terminated !" >>$LOG_FILE fi   # background process lgwr if [ `grep ora_lgwr_ora92 $TEMP_PATH/ora_process_info` ]; then COUNT=$((COUNT+1)) else echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`,The Process ora_lgwr_ora92 was terminated !" >>$LOG_FILE fi   # background process pmon if [ `grep ora_pmon_ora92 $TEMP_PATH/ora_process_info` ]; then COUNT=$((COUNT+1)) else echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`,The Process ora_pmon_ora92 was terminated !" >>$LOG_FILE fi   # background process smon if [ `grep ora_smon_ora92 $TEMP_PATH/ora_process_info` ]; then COUNT=$((COUNT+1)) else echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`,The Process ora_smon_ora92 was terminated !" >>$LOG_FILE fi   if [ "$COUNT" -eq 6 ];then echo >>$LOG_FILE echo "\t\t\t\tThe main six Oracle processes is OK !!" >>$LOG_FILE else : fi     # IXDBA.NET社区论坛 # Check the oracle tablespace. # echo >>$LOG_FILE echo >>$LOG_FILE echo "***************************************** check oracle tablespace *****************************************">>$LOG_FILE #su - oracle -c sqlplus dxh/dxh < /home/guest/dxhwh/niyl/tablespace_query.sql >>$LOG_FILE sqlplus -s xxx/xxx < $TEMP_PATH/ts_info set pagesize 100 set linesize 100 col status for a10 col tablespace_name for a20 col contents for a10 col "size(M)" for a15 col used for a15 col pct for a10 select d.status, d.tablespace_name, TO_CHAR(NVL(a.bytes / 1024 /1024, 0),'99G999G990') "size(M)", TO_CHAR(NVL(a.bytes - NVL(f.bytes, 0),0)/1024/1024, '99G999G990D00') used, TO_CHAR(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0), '990D00')||'%' pct FROM sys.dba_tablespaces d, (select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a, (select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) order by tablespace_name ; exit !EOF   cat $TEMP_PATH/ts_info>>$LOG_FILE cat $TEMP_PATH/ts_info |grep ONLINE |awk '{print $2":"$3":"$4":"$5}' |while read line do ts_name=$(echo $line |awk -F ':' '{print $1}') ts_total=$(echo $line |awk -F ':' '{print $2}') ts_used=$(echo $line |awk -F ':' '{print $3}') ts_used_pct=$(echo $line |awk -F ':' '{print $4}' |awk -F '%' '{print $1}'|awk -F '.' '{print $1}') if [ "$ts_used_pct" -gt "$TS_VALUE" -o "$ts_used_pct" -eq "$TS_VALUE" ]; then echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`,表空间$ts_name 的剩余空间紧张,请尽快清理表空间!" >>$LOG_FILE else echo "\t\t\t\t The tablespace of $ts_name\t is OK!!" >>$LOG_FILE fi done   # # Check the oracle Job. # echo >>$LOG_FILE echo >>$LOG_FILE echo "***************************************** check oracle job *****************************************">>$LOG_FILE sqlplus -s xxx/xxx <> $LOG_FILE col job for 999 col last_date for a20 col next_date for a20 col what for a40 set linesize 120   select job,what, to_char(last_date,'yyyy-mm-dd hh24:mi:ss') last_date, to_char(next_date,'yyyy-mm-dd hh24:mi:ss') next_date, failures from dba_jobs order by job; !!ET   sqlplus -s xxx/xxx < $TEMP_PATH/job_info col flag for a5 col rou for 99999 select 'XXX' flag,job,failures,broken,round(next_date-sysdate,2)*100 rou from dba_jobs order by job; !EOF IXDBA.NET技术社区   cat $TEMP_PATH/job_info |grep XXX |awk '{print $2,$3,$4,$5}' |while read line do jobnum=`echo $line | awk '{print $1}'` failure=`echo $line | awk '{print $2}'` broken=`echo $line | awk '{print $3}'` round=`echo $line | awk '{print $4}'` if [ "$jobnum" -eq 3 -o "$jobnum" -eq 4 ] ; then   if [ "$failure" -eq 0 -a "$broken"="N" -a "$round" -le 100 ]; then echo "\t\t\t\tThe Job $jobnum is OK!!" >>$LOG_FILE else echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`,The Job $jobnum was terminated !" >>$LOG_FILE fi else if [ "$failure" -eq 0 -a "$broken"="N" -a "$round" -eq 0 ]; then echo "\t\t\t\tThe Job $jobnum is OK!!" >>$LOG_FILE else echo "LOG-Warnning: `date +%Y'-'%m'-'%d' '%H':'%M':'%S`,The Job $jobnum was terminated !" >>$LOG_FILE fi fi done       # # Check oracle alert log. # echo >>$LOG_FILE echo >>$LOG_FILE echo "***************************************** check oracle alert log *****************************************">>$LOG_FILE tail -300 $ORACLE_BASE/admin/ora92/bdump/alert_ora92.log | grep -v Thread | \ grep -v Current | grep -v "`date +'%a %h'`" | grep -v ":[0-9][0-9]:" >>$LOG_FILE 2 系统管理篇 2.1 AIX管理经验谈 来源: www.ixdba.net 作者: IXDBA.NET官方 时间:2008-05-08 阅读:69 在AIX中可以通过打开acct功能来查看用户的资源使用情况, 主要包括: 用户连接情况、用户CPU使用情况、磁盘使用情况和打印机使用情况等。 具体的步骤(共7步)有: 1. 在/var/adm/acct目录下创建三个子目录:nite,sum,fiscal 2. 以root登录,到/var/adm目录下,执行/usr/lib/acct/nulladm wtmp pacct。 3. 通过在/etc/rc文件中添加两行(最后一行"exit 0"之上): echo "Starting Process Accounting" /usr/bin/su - adm -c /usr/lib/acct/startup 打开记帐功能。 4. 将/etc/filesystems中要加入磁盘记帐的文件系统相关节中的account值改成true 5. 修改/etc/qconfig文件,要加入打印机使用记帐的打印队列的描述节中添加一行, 如: lp0: device=dlp0 acctfile = /var/adm/qacct # 添加行 6. 修改cron,例/var/spool/cron/crontabs/adm文件: 10 23 * * 0-6 /usr/lib/acct/runacct \ 2> /usr/adm/acct/nite/accterr > /dev/null 0 23 * * 0-6 /usr/lib/acct/dodisk > /dev/null 2>&1 0 * * * * /usr/lib/acct/ckpacct > /dev/null 2>&1 15 4 1 * * /usr/lib/acct/monacct > /dev/null 2>&1 7. 如果要使用adm用户进行记帐管理,首先要给它分配密码, 然后在PATH环境变量中包括/usr/lib/acct以方便命令执行。 完成这些步骤后,系统会在步骤一生成的目录下定期生成报告文件, 记录各用户的资源使用情况。 2.2 IBM AIX服务器巡检流程 1、检查系统硬件情况:设备故障灯是否有亮 2、系统错误报告(errlog) 3、有否发给root用户的错误报告(mail) 4、检查hacmp.out,smit.log,boot.log 5、关键系统的文件使用率不大于80% 6、逻辑卷有否stale 7、内存交换区使用率是否超过70% 8、内存交换区的大小是否为物理内存的1.5倍 9、检查备份情况(有否系统备份、用户数据备份、磁带机是否需要清洗) 10、通信(网卡、IP、路由表、ping、/etc/hosts、DNS设置等) IXDBA.NET技术社区 11、是否有数据保护方式如RAID10/RAID5,是否有Hot spare 12、系统DUMP设置是否正确 13、检查系统参数是否正确 1)/etc/enviroment中的TZ不能有夏时制 2)如有数据库:Aio:available 3)HACMP中I/O pacing:High Water Mark/Low Water MArk:33/24 4)HACMP中Syncd:10 5)HACMP中Power Monitorff 14、检查rootvg是否有镜象 15、检查errdemon,srcmstr是否正常运行 16、机房环境(电压、湿度) 17、系统性能:有否性能瓶颈(topas,vmstat) 18、补丁程序(PTF)、微码(是否需要升级) 19、HACMP测试:Cluster Verification 20、系统硬件诊断 21、运行#snap -ac,生成文件snap+s/n.pax.Z 22、机器清洁 注:1~15为A类维护(季度维护),16~18为B类维护(半年维护),19~22为C类维护(年度维护) 2.3 超经典的AIX系统管理手册之一(AIX系统的安装) 来源: www.ixdba.net 作者: IXDBA.NET官方 时间:2008-03-31 阅读:231 本文章共3524字,分3页,当前第1页,快速翻页:123 本站陆续推出AIX系列教程,包含了系统安装、常用命令、镜像、更换硬盘、HA的安装配置等,欢迎大家学习使用,请提出您的意见和建议! 第一章 AIX操作系统的安装 安装介质与方式 AIX操作系统的安装可以: 1) 通过Tape安装。 需要16M RAM。PCI总线的RS/6000系列小型机不支持该方式。 www.ixdba.net 2) 通过CD-ROM安装。 需要有8M RAM. 3) 通过网络安装。这需要使用AIX Network Install Manager (NIM)来实现。系统支持通过Token Ring 、FDDI、ethernet的安装。 4) 预先安装(Preinstall).在购买时选择“预装操作系统”。 AIX操作系统的安装方式(Installation Method)有以下四种: 完全覆盖安装: 操作系统被安装在rootvg的第一块硬盘上,这将覆盖原系统中所有的系统保留目录。 保留安装:这种安装方式可以保留操作系统的版本不变,同时保留 rootvg上的用户数据,但将覆盖/usr 、/tmp、/var 和/ 目录。用户还可以利用/etc/preserve.list指定系统安装时需要保留的文件系统。默认的需保留的文件系统为/etc/filesystem中所列。 升级安装:这种安装方式用于操作系统的升级,这将覆盖/tmp目录。这是系统默认的安装方式。 备份带安装:恢复用mksysb命令生成的安装带中/image.data中指定的文件系统,这种安装方式用于系统(rootvg)的复制。 BOS(Base Operating System)安装 ? 打开主机电源。 ? 连接好系统终端,把第一张安装介质(磁带、光碟)插入驱动器。 ? 在开机后按(图形终端)进入系统安装画面。 ? 当终端显示如下信息时: ☆☆☆☆☆☆Please define the system console☆☆☆☆☆☆ Type a 1 and press enter to use this terminal as the system console. Type een 1 en druk op enter om deze terminal als de systeemconsole to gebruiken. Skrive tallet 1 og trykk paa enter for aa bruke denne terminalen som systemkonsoll. Pour definir ce terminal comme console systeme, appuyez sur 1puis sur entree. Taste 1 and ansch1iessend die eingabetaste druecken,um diese datenstation als systemkonsole zu verwenden. Prenier I1 tasto 1 ed invio per usare questo terminal como consolo. Escriba 1 y pulse intro para utilizer esta terminal como consola del sistema. a)Tryck paa 1 och sedan paa enter om dy vill att haer terminalen ska vara systemkonsol 键入“1”并回车(注意:键入的“1”不回显)选择主控台 ? (5) 屏幕上将不断显示一些信息,几分钟后出现: >>> 1 Type 1 and press enter to have English during install. 2 Type 2 en druk op enter om tijdens het installeren het Nederlands te krijgen. 3 Entrez 3 pour effectuer 1 installation en francais. 4 Fr Installation in deutscher sprache 4 eingeben und die eingabetaste drcken. 5 Immettere 5 e premereinvio per 1 installazione initaliona. 6 Escriba 6 ypulse intro para usar el idioma espa ol durante la instalaci n. 7 Skriv 7 och tryck ned enter=svenska vid installationen.   88 Help?   >>>Choice【1】:   键入“1”后回车,选择语言环境为English Ø         (4) 此后屏幕出现: Welcome to Base Operating System IXDBA.NET社区论坛 Installation and Maintenance   Type the number of your choice and press enter .Choice is indicated by>>> >>>1 Start install now with default settings 2 Change/show installation settings and install 3 Start Maintenance Mode for system Recovery   88 Help? 99 Previous Menu >>>Choice 〔1〕:   这是系统安装和维护的主菜单。       Ø         安装BOS基本操作系统   键入“2”并回车,屏幕出现“Install and Setting”画面: Installlation and a Settings   Either type 0 and press enter to install with current settings, or type the number of the setting you want to change and press enter.   1 system setting: Method of installlation.….….…Preserve install Disk wher you want to install .….…hdisk0 2 Prinary Language Environment settings (AFTER Install): Cultural Convention.….….… English(United States) Language.….….….….….….. English(United States) Keyboard.….….….….….….. English(United States) Keyboard Type.….….….…... Eefault 3 Install Trusted Computing Base.…No   >>>0 Install AIX wint the current settings listed above. 88 Help? 99 Previous Menu   >>>Choice 〔1〕:   这是系统安装的默认设置,用户可以根据需要进行修改。 与此同时,在屏幕的右下角会出现如下的警告信息: WARNING:Base Operating system installation will destroy or impair recovery of ALL data on the destination disk hdisk0.                     以上是提醒用户安装系统的后果将破坏用户原有的硬盘上的数据。 安装时可以选择保护安装(Preserve install) 或完全覆盖安装(New and complete overwrite)。 (6) 设置完毕选择 0 安装即开始,屏幕将不断显示安装的进行情况,当BOS安装完毕系统将自动重启,否则在BOS安装完毕时屏幕会再次提示拧钥匙并处于等待状态。   Ø         (7) 系统重新启动后,屏幕会提示输入终端类型,键入主控台的类型(vt100或ibm3151),此后将出现系统设置屏,用上下键移动亮条进行基本系统参数的设置:     ★set date and time 设置time zone选择 cur+8 ★set root password 分两次输入相同口令,即可设置成功,移动光标至Task complete-Exit to AIX LOGIN退出。 IXDBA.NET技术社区   注意:不能用F3或F10键退出,而应选菜单以通知操作系统设置任务已完成;否则,在下次启机时仍会自动进入系统设置画面。同时如果终端类型输入错误,屏幕显示将不可预料,此时可以用ctrl-c退出,重新输入。 至此,BOS安装完毕,以后启动机器时将不会有配置信息,直接出现LOGIN提示符。 2.4 超经典的AIX系统管理手册之二(AIX操作系统基本命令) 第二章 AIX操作系统基本命令 ? 系统的进入和退出 login: 输入用户名(例如:user01) password: 输入用户口令 若用户名及口令均正确,则用户将登陆成功。此时系统会出现命令提示符$或#,即表示可接收用户输入的操作系统命令。 www.ixdba.net 退出系统:或 exit或logout。 例:#(or$)exit #(or$)Ctrl^D 注,#为ROOT用户的命令提示符,$为一般用户 password password命令用于建立或修改用户的密码。 如: #password passwd: —输入旧口令 new passwd: —输入新口令 re-enter new paswd: —重新输入新口令 mkdir、rm、mv和cd mkdir :用于创建目录 $ mkdir oracle $ ls oracle $ rm :用于删除文件或目录(rm –r 删除目录时目录内有内容,用-r一起删除) $ rm -r oracle $ ls $ mv :用于改变文件或目录名 $ mkdir ll $ ls ll $ mkdir kk $ ls kk ll $ mv ll kk $ ls kk $ cd kk $ ls ll $ cd :用于进入系统某一级目录中去 $ cd / $ pwd / $ cd /home/oracle $ pwd /home/oracle $ ls ? 功能:显示目录中的内容,列出当前目录中所有文件的文件名 ? 参数说明: a :列出目录中所有文件 d :列出所有子目录 l :列出长格式文件信息 ? 举例: ls –a :列出当前目录中的所有文件 $ ls -a #UNTITLED# .dt createdbscripts oracle . .dtprofile dead_letter smit.log .. .profile ll smit.script .TTauthority .sh_history make.log websm.log .Xauthority afiedt.buf mbox websm.script $ ls –l :显示文件的详细信息 $ ls -l total 295 -rw-r--r-- 1 201 dba 3 Sep 01 15:24 #UNTITLED# -rw-r--r-- 1 201 dba 51 Jul 08 18:18 afiedt.buf drwxrwxr-x 2 201 dba 512 May 08 11:49 createdbscripts drwx------ 2 201 dba 512 Jun 19 09:27 dead_letter drwxr-xr-x 2 201 dba 512 Sep 22 10:17 ll -rw-r--r-- 1 201 dba 95987 Apr 18 14:51 make.log -rw------- 1 201 dba 11174 Sep 17 09:15 mbox drwxr-xr-x 3 201 dba 512 Sep 22 10:21 oracle -rw-r--r-- 1 201 dba 8971 Sep 20 11:08 smit.log -rw-r--r-- 1 201 dba 5437 Sep 20 11:08 smit.script -rw-r--r-- 1 201 system 1682 Sep 02 15:18 websm.log -rw-r--r-- 1 201 system 21441 Sep 02 15:10 websm.script $ date ? 功能:显示当前日期和时间,超级用户可以进行修改 ? 举例:$ date Mon Sep 22 10:28:26 BEIST 2003 $ wc ü 功能:计算文件中的行数、字数和字符数 ü 参数说明: c :计算字符数 l :计算行数 w :计算字数 举例: # wc profile 13 53 381 profile | | | 行数 字数 字符数 $ wc smit.log 422 1162 8971 smit.log $ who ? 功能:列出当前系统注册的用户 举例:$who am i-- 列出当前系统使用者身份 $ who oracle lft0 Sep 22 09:05 oracle pts/0 Sep 22 10:17 (192.168.100.79) oracle pts/4 Sep 22 09:05 (:0.0) $ who am i oracle pts/0 Sep 22 10:17 (192.168.100.79) $ finger ? 显示当前登陆到系统中的用户的信息 ? 举例: # finger Login Name TTY Idle When Site I nfo oracle ??? *l0 2:02 Mon 09:05 oracle ??? p4 1:59 Mon 09:05 root ??? p0 Mon 11:06 # finger oracle Login name: oracle Directory: /usr/oracle/ora90 Shell: /usr/bin/ksh On since Sep 22 09:05:35 on lft0, 2 hours 2 minutes Idle Time (messages off) On since Sep 22 09:05:41 on pts/4, 1 hour 59 minutes Idle Time from :0.0 No Plan. # ps ? 功能:显示后台进程的有关信息。单独使用ps将显示由当前终端启动的后台进程的PID、终端号、进程已执行时间以及启动该进程的命令 ? 语法:ps -options ? 参数说明: -e :显示系统内当前运行的所有后台进程 -f :除ps所提供的信息外,还显示用户名、PPID(父进程ID)及启动时间 -l :除ps所提供的信息外,还显示 User ID, PPID 和进程优先级 例: # ps PID TTY TIME CMD 803034 pts/0 0:00 -ksh 917524 pts/0 0:00 ps # ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 09:03:04 - 0:00 /etc/init root 90262 1 0 09:03:42 - 0:00 /usr/ccs/bin/shlap64 root 106572 139368 0 09:03:30 - 0:01 /usr/lpp/X11/bin/X -D /usr oracle 123030 155720 0 09:05:36 - 0:00 dtwm root 139368 1 0 09:03:29 - 0:00 /usr/dt/bin/dtlogin -daemo oracle 155720 172088 0 09:05:35 - 0:00 /usr/dt/bin/dtsession root 163946 245824 0 09:04:28 - 0:00 /usr/sbin/rsct/bin/rmcd -r root 172088 139368 0 09:03:30 - 0:00 dtlogin <:0> -daemo oracle 180378 188526 0 09:06:20 pts/4 0:00 -ksh root 188526 483470 0 09:06:10 pts/4 0:00 -ksh root 196670 303186 0 09:04:34 - 0:00 rpc.ttdbserver 100083 1 root 204866 245824 0 09:04:34 - 0:00 /usr/sbin/rsct/bin/IBM.Aud oracle 221370 581780 0 09:05:41 - 0:03 /usr/dt/bin/dtterm root 229440 1 0 09:03:41 - 0:01 /usr/sbin/syncd 60 root 237626 1 0 09:03:42 - 0:00 /usr/lib/errdemon root 245824 1 0 09:03:47 - 0:00 /usr/sbin/srcmstr root 262240 245824 0 09:03:50 - 0:00 /usr/sbin/syslogd root 278642 245824 0 09:04:28 - 0:00 /usr/sbin/rsct/bin/ctcasd root 286806 245824 0 09:04:30 - 0:00 /usr/sbin/rsct/bin/IBM.CSM oracle 295050 1 0 09:07:03 - 0:00 ora_dbw0_ORCL root 303186 245824 0 09:03:59 - 0:00 /usr/sbin/inetd root 311380 245824 0 09:03:53 - 0:00 sendmail: accepting connec root 319566 245824 0 09:03:56 - 0:00 /usr/sbin/portmap root 327760 245824 0 09:04:02 - 0:00 /usr/sbin/snmpd root 335954 245824 0 09:04:06 - 0:00 /usr/sbin/dpid2 root 344150 245824 0 09:04:09 - 0:00 /usr/sbin/hostmibd oracle 368788 1 0 11:09:35 - 0:00 oracleORCL (LOCAL=NO) root 376946 1 0 09:04:18 - 0:00 /usr/sbin/cron root 385122 245824 0 09:04:12 - 0:00 /usr/sbin/biod 6 oracle 393320 1 0 09:07:03 - 0:00 ora_reco_ORCL daemon 401510 245824 0 09:04:15 - 0:00 /usr/sbin/rpc.statd root 409726 1 0 09:04:28 - 0:00 /usr/bin/itesmdem itesrv.i root 417902 245824 0 09:04:18 - 0:00 /usr/sbin/rpc.lockd root 434288 1 0 09:04:25 - 0:00 /usr/sbin/uprintfd root 442484 245824 0 09:04:25 - 0:00 /usr/sbin/writesrv root 450676 245824 0 09:04:22 - 0:00 /usr/sbin/qdaemon root 458874 245824 0 09:04:31 - 0:00 /usr/sbin/rsct/bin/IBM.Ser oracle 475266 1 0 09:05:35 - 0:00 /usr/dt/bin/ttsession -s oracle 483470 221370 0 09:05:41 pts/4 0:00 /usr/bin/ksh oracle 491646 1 0 09:07:02 - 0:00 ora_pmon_ORCL oracle 499860 1 0 09:07:33 pts/4 0:08 /usr/oracle/ora90/bin/tnsl oracle 524452 1 0 09:07:03 - 0:01 ora_ckpt_ORCL root 532612 1 0 09:04:25 lft0 0:00 /usr/sbin/getty /dev/conso root 540830 245824 0 09:04:32 - 0:00 /usr/sbin/rsct/bin/IBM.ERr imnadm 557194 1 0 09:04:25 - 0:00 /usr/IMNSearch/httpdlite/h root 565388 1 0 09:04:25 - 0:00 /usr/lpp/diagnostics/bin/d oracle 573584 1 0 09:07:03 - 0:01 ora_smon_ORCL oracle 581780 123030 0 09:05:41 - 0:00 /usr/dt/bin/dtexec -open 0 oracle 589978 1 0 09:07:03 - 0:00 ora_lgwr_ORCL oracle 598188 1 0 09:17:14 - 0:00 oracleORCL (LOCAL=NO) oracle 606440 1 0 11:09:28 - 0:00 oracleORCL (LOCAL=NO) oracle 622592 1 0 11:09:49 - 0:00 oracleORCL (LOCAL=NO) oracle 631032 1 0 11:09:34 - 0:00 oracleORCL (LOCAL=NO) oracle 638984 1 0 11:09:47 - 0:00 oracleORCL (LOCAL=NO) oracle 647404 1 0 10:58:31 - 0:01 oracleORCL (LOCAL=NO) oracle 655384 1 0 10:46:10 - 0:00 oracleORCL (LOCAL=NO) oracle 663756 1 0 11:09:38 - 0:00 oracleORCL (LOCAL=NO) oracle 671964 1 0 10:57:32 - 0:00 oracleORCL (LOCAL=NO) oracle 679998 1 0 11:09:32 - 0:00 oracleORCL (LOCAL=NO) oracle 688340 1 0 11:01:09 - 0:00 oracleORCL (LOCAL=NO) oracle 696500 1 0 11:09:32 - 0:00 oracleORCL (LOCAL=NO) oracle 704756 1 0 11:09:32 - 0:00 oracleORCL (LOCAL=NO) oracle 712916 1 0 09:31:17 - 0:00 oracleORCL (LOCAL=NO) oracle 721104 1 0 09:33:58 - 0:00 oracleORCL (LOCAL=NO) root 729308 803034 4 11:09:56 pts/0 0:00 ps -ef oracle 737532 1 0 11:07:43 - 0:00 oracleORCL (LOCAL=NO) oracle 753856 1 0 09:34:03 - 0:00 oracleORCL (LOCAL=NO) oracle 762104 1 1 11:09:53 - 0:00 oracleORCL (LOCAL=NO) oracle 770280 1 0 11:09:46 - 0:00 oracleORCL (LOCAL=NO) oracle 778466 1 0 11:04:42 - 0:00 oracleORCL (LOCAL=NO) oracle 786634 1 0 11:09:50 - 0:00 oracleORCL (LOCAL=NO) oracle 794656 1 0 11:08:10 - 0:00 oracleORCL (LOCAL=NO) root 803034 1056846 0 11:06:38 pts/0 0:00 -ksh oracle 811034 1 0 10:59:20 - 0:00 oracleORCL (LOCAL=NO) oracle 819402 1 0 09:47:03 - 0:00 oracleORCL (LOCAL=NO) oracle 827620 1 0 10:10:40 - 0:00 oracleORCL (LOCAL=NO) oracle 835810 1 0 10:57:30 - 0:00 oracleORCL (LOCAL=NO) oracle 843988 1 0 09:49:16 - 0:00 oracleORCL (LOCAL=NO) oracle 852190 1 0 10:52:22 - 0:00 oracleORCL (LOCAL=NO) oracle 860378 1 0 09:33:55 - 0:00 oracleORCL (LOCAL=NO) oracle 868586 1 0 10:52:21 - 0:00 oracleORCL (LOCAL=NO) oracle 876796 1 0 11:09:29 - 0:00 oracleORCL (LOCAL=NO) oracle 884784 1 0 10:59:22 - 0:00 oracleORCL (LOCAL=NO) oracle 893164 1 0 10:42:26 - 0:00 oracleORCL (LOCAL=NO) oracle 909556 1 0 11:09:49 - 0:00 oracleORCL (LOCAL=NO) oracle 917528 1 1 11:09:53 - 0:00 oracleORCL (LOCAL=NO) oracle 925948 1 0 11:09:47 - 0:00 oracleORCL (LOCAL=NO) oracle 942326 1 0 11:07:47 - 0:00 oracleORCL (LOCAL=NO) oracle 950360 1 0 11:07:35 - 0:00 oracleORCL (LOCAL=NO) oracle 958486 1 0 11:09:39 - 0:00 oracleORCL (LOCAL=NO) oracle 974934 1 0 11:07:23 - 0:00 oracleORCL (LOCAL=NO) oracle 983294 1 0 10:48:40 - 0:00 oracleORCL (LOCAL=NO) oracle 999438 1 0 10:58:51 - 0:00 oracleORCL (LOCAL=NO) oracle 1007638 1 0 10:52:27 - 0:00 oracleORCL (LOCAL=NO) oracle 1015834 1 0 11:08:09 - 0:00 oracleORCL (LOCAL=NO) oracle 1024012 1 0 09:45:28 - 0:00 oracleORCL (LOCAL=NO) oracle 1032230 155720 0 11:08:33 - 0:00 /usr/dt/bin/dtexec -open 0 oracle 1040390 1 0 10:58:52 - 0:00 oracleORCL (LOCAL=NO) root 1056846 303186 0 11:06:38 - 0:00 telnetd -a oracle 1064970 1 0 10:05:40 - 0:00 oracleORCL (LOCAL=NO) oracle 1081404 1 0 11:09:31 - 0:00 oracleORCL (LOCAL=NO) oracle 1089562 1 0 11:09:32 - 0:00 oracleORCL (LOCAL=NO) oracle 1097770 1 1 11:09:53 - 0:00 oracleORCL (LOCAL=NO) oracle 1105962 1 0 11:09:32 - 0:00 oracleORCL (LOCAL=NO) oracle 1114198 1 0 11:07:47 - 0:00 oracleORCL (LOCAL=NO) oracle 1122406 1 0 11:07:00 - 0:00 oracleORCL (LOCAL=NO) oracle 1130564 1 0 10:27:48 - 0:00 oracleORCL (LOCAL=NO) oracle 1138778 1 0 10:57:28 - 0:00 oracleORCL (LOCAL=NO) oracle 1146948 1 0 11:07:26 - 0:00 oracleORCL (LOCAL=NO) oracle 1155106 1032230 0 11:08:33 - 0:00 /usr/dt/bin/dtscreen oracle 1163312 1 0 11:09:39 - 0:00 oracleORCL (LOCAL=NO) oracle 1171526 1 0 11:00:39 - 0:01 oracleORCL (LOCAL=NO) oracle 1179700 1 0 10:53:31 - 0:00 oracleORCL (LOCAL=NO) oracle 1196136 1 0 11:09:32 - 0:00 oracleORCL (LOCAL=NO) oracle 1204300 1 0 10:58:52 - 0:00 oracleORCL (LOCAL=NO) oracle 1212516 1 0 10:54:08 - 0:00 oracleORCL (LOCAL=NO) oracle 1220718 1 0 10:42:22 - 0:00 oracleORCL (LOCAL=NO) oracle 1237084 1 0 10:42:20 - 0:00 oracleORCL (LOCAL=NO) oracle 1245250 1 0 11:09:33 - 0:00 oracleORCL (LOCAL=NO) oracle 1253470 1 0 11:08:09 - 0:00 oracleORCL (LOCAL=NO) oracle 1261658 1 0 11:09:32 - 0:00 oracleORCL (LOCAL=NO) oracle 1269822 1 0 10:28:05 - 0:10 oracleORCL (LOCAL=NO) oracle 1294398 1 0 10:46:13 - 0:00 oracleORCL (LOCAL=NO) oracle 1302590 1 0 10:46:08 - 0:00 oracleORCL (LOCAL=NO) oracle 1310814 1 0 11:09:34 - 0:00 oracleORCL (LOCAL=NO) oracle 1318996 1 0 11:04:45 - 0:00 oracleORCL (LOCAL=NO) oracle 1335400 1 0 11:09:47 - 0:00 oracleORCL (LOCAL=NO) oracle 1343576 1 0 11:09:39 - 0:00 oracleORCL (LOCAL=NO) oracle 1351830 1 0 11:09:31 - 0:00 oracleORCL (LOCAL=NO) oracle 1368176 1 0 11:09:32 - 0:00 oracleORCL (LOCAL=NO) # # ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 240001 A 0 803034 1056846 1 60 20 20009284 952 pts/0 0:00 k sh 200001 A 0 1114200 803034 1 60 20 2003549a 488 pts/0 0:00 p s # kill ? 功能:杀死后台进程 ? 语法:kill -num PID ? 举例: kill –9 23094 (-9 是软件终止进程的信号,是不可忽略的) find ? 功能:在一个或多个目录中查找符合指定条件的文件,显示文件名或对这些文件进行特定的操作 ? 语法:find path expression ? 参数说明: -type f 文件 d 目录 -size +n 文件大小超过n blocks(1block=512 bytes) -n 文件大小小于n blocks n 文件大小等于n blocks -mtime +x X天以前被修改的文件 -x X天以内被修改的文件 -perm onum 访问指定权限的文件(权限以8进制表示) mode 访问指定权限的文件(权限以字母表示,如rwx) -user User 属于用户user的文件 -o 逻辑‘或’ ? 举例: 1. find . –name ‘unix’ –print 在当前目录及其子目录中查找文件名为“m*”的所有文件(‘*’是通配符)并显示文件名。 # find . -name "unix" -print ./usr/lib/boot/unix ./usr/oracle/ora90/inventory/filemap/md/demo/unix ./usr/oracle/ora90/inventory/filemap/ultrasearch/tools/remotecrawler/scripts/uni x ./usr/oracle/ora90/md/demo/unix ./usr/oracle/ora90/ultrasearch/tools/remotecrawler/scripts/unix ./upload/Disk2/stage/Components/oracle.sysman.website.nls/9.2.0.1.0/1/DataFiles/ Expanded/websitehtm/unix ./unix # 2. find . –name ‘m*’ –exec ls –l {} \; 在当前目录及其子目录中查找文件名为“m*”的所有文件(‘*’是通配符)并显示详细的文件列表信息。-exec 使得find以非交互的方式执行-exec后的命令。‘{}’用于保留find的查找结果,并将其作为ls –l 的输入。 3. find . –name ‘m*’ –ok rm {} \; 在当前目录及其子目录中查找文件名为“m*”的所有文件(‘*’是通配符)删除之。-ok 使得find以交互的方式执行-ok后的命令。 4. find . -perm 644 -mtime +4 –print 在当前目录及其子目录中查找权限为644、4天以前被修改过的文件。 grep ? 功能:在文件或标准输入中搜索与指定格式相匹配的行 ? 语法:grep [options] pattern [file1 file 2..] ? 参数说明: -v :显示与指定格式不匹配的行 -c :统计满足条件的行数 -l :只显示满足匹配条件的文件名 -n :显示满足条件的行所在的行号 -I :查找时忽略大小写 -w :做全单词匹配 ? 举例: 1. grep a websm.log 搜索.profile文件中与mail匹配的行并显示。 # grep a websm.log com.ibm.websm.preferences.WXPreferenceException: Unable to load preferences from /WebSM.pref. Default settings will be used. This preference file will be updated if the Check Button in the Exit Confirmation Dialog is checked. at com.ibm.websm.preferences.WSPreferenceImpl.loadData(WSPreferenceImpl. java:185) at com.ibm.websm.preferences.WCPreferences.LoadData(WCPreferences.java:1 94) at com.ibm.websm.preferences.WCPreferences.(WCPreferences.java:111 ) at com.ibm.websm.console.WConsole.getPreferences(WConsole.java:592) at com.ibm.websm.console.WConsole.getPrefData(WConsole.java:559) at com.ibm.websm.console.WConsole.(WConsole.java:119) at com.ibm.websm.console.WConsole.main(WConsole.java:1294) com.ibm.websm.bridge.directory.WDirectoryException: Caught EOFException while reading the stream header at com.ibm.websm.bridge.directory.WDirectory.get(WDirectory.java:128) at com.ibm.websm.preferences.WSPreferenceImpl.loadData(WSPreferenceImpl. java:178) at com.ibm.websm.preferences.WCPreferences.LoadData(WCPreferences.java:1 94) at com.ibm.websm.preferences.WCPreferences.(WCPreferences.java:111 ) at com.ibm.websm.console.WConsole.getPreferences(WConsole.java:592) at com.ibm.websm.console.WConsole.getPrefData(WConsole.java:559) at com.ibm.websm.console.WConsole.(WConsole.java:119) at com.ibm.websm.console.WConsole.main(WConsole.java:1294) # 2. grep –v mail .profile 显示与mail不匹配的行。 3. grep “^a[0-9]z$” filename 在filename中查找以’a’开头、以’z’结尾、中间包含数字’0’-‘9’的串。 2.5 超经典的AIX系统管理手册之三(vi编辑器的使用) 2.5.1 vi 简介 vi 是 UNIX 世界里使用非常普遍的全屏幕文本编辑器,几乎任何一种UNIX系统都会提供这套软件。AIX当然也支持这种编辑器。熟悉DOS下的文本处理后,用户在开始接触vi时也许会感到它并不好用,然而一旦用户熟悉、掌握了vi ,就会发现它实在是一种功能强大、使用灵活方便的编辑器。 www.ixdba.net UNIX 提供一系列的ex编辑器,包括ex,edit和vi。相对于全屏幕编辑器,现在可能很难想像如何使用ex,edit这种行列编辑器。 vi 的原意是“Visual”,它是一个立即反应的编辑程式,也就是说可以立刻看到操作结果。vi 必须控制整个终端屏幕的显示输出,而终端的种类有许多种,特性又不尽相同,所以 vi 有必要知道现在所使用的是哪一种终端。这是通过 TERM 这个环境变量来设定的。 在命令行键入vi就可以进入vi的编辑环境。vi 有三种模式:命令模式、文本输入模式以及命令项模式。执行vi以后,会先进入命令模式,此时用户可输入各种子命令对行进行编辑,如删除行、拷贝行等。在文本输入模式下,用户可以修改一行的内容并添加新行。在命令模式下键入 i、I、a 、A或o等即可进入文本输入模式,键入ESC键即可返回命令模式。在命令项模式下,用户可以通过子命令输入更多的参数,如“/”子命令要求输入下一个查找项。用户使用ESC键返回命令模式。 2.5.2 vi的进入与离开 vi可以在全屏幕方式下编辑一个或多个文件。如果在执行vi时没有指定文件名,则vi 命令会自动产生一个无名的空文件。如果指定的文件不存在,则vi将按指定的文件名创建一个新的文件。进入 vi 后屏幕左方会出现波浪符号,凡是列首有该符号就代表此列目前是空的。要离开 vi 可以在命令模式下键入 :q , :wq 命令则是存档后再离开(注意冒号)。注意vi并不锁住所编辑的文件,因此多个用户可能同时编辑一个文件,那么最后保存的文件版本将被保留。 以下是vi 命令使用的一些选项及说明: -c command :在对文件进行编辑前,先执行command命令; -r filename :恢复文件filename; -R :以只读方式编辑文件; -y number :每屏只编辑number 行文本。 2.5.3 vi 的文本输入模式 使用以下几种命令可以进入文本输入模式(用户在任何时候都可以按ESC键返回命令模式): 新增 (append) : a :从光标所在位置之后开始输入文本 A :从光标所在行尾开始输入文本 插入 (insert) : i :从光标所在位置之前开始输入文本 I :从光标所在行的第一个非空白字符前面开始输入文本 开始 (open) : o :在光标所在行后插入一新行。 O :在光标所在行前插入一新行。 3.4 vi 基本编辑命令 在 vi 里,输入跟编辑是两码事。编辑是在命令模式下操作的,先利用命令移动光标来定位要进行编辑的地方,然后才下命令做编辑。 命令 说明 备注 cc 或S 修改一整行的文本 C 改变一行中光标所在位置之后的部分 dd 删除光标所在的列 D 删除一行中光标所在位置之后的部分 dw 删除光标所在的单词 J 将下一行文本内容合并到本行行尾 r 修改光标所在字符,r 后接要修正的字符 R 修改本行内容 s 修改光标所在字符 u 恢复上一次所做的修改 x 删除光标所在字符 X 删除光标左侧字符 ~ 改变光标所在字符的大小写 . 重复上一次的操作 << 将当前行移到左边 >> 将当前行移到右边 p 将缓冲区的内容拷贝到光标所在行的下一行 P 将缓冲区的内容拷贝到光标所在行的上一行 “ad 将文本删除至缓冲区a “ap 粘贴缓冲区a中的内容 yy或Y 将当前行存入缓冲区 yw 将光标所在的单词存入缓冲区 0 移动到光标所在列的最前面 =[Home] $ 移动到光标所在列的最后面 =[End] [CTRL+d] 向下半页 =[PageDown] [CTRL+f] 向下一页 [CTRL+u] 向上半页 [CTRL+b] 向上一页 =[PageUp] [CTRL+e] 下滚一行 [CTRL+y] 上滚一行 H 移动到屏幕的第一行 M 移动到屏幕的中间 L 移动到屏幕的最后一行 b 移动到上个小字的第一个字母 B 移动到上个大字的第一个字母 w 移动到下个小字的第一个字母 W 移动到下个大字的第一个字母 e 移动到下个小字的最后一个字母 E 移动到下个大字的最后一个字母 ^ 移动到光标所在列的第一个非空白字符 n- 减号移动到上一行的第一个非空白字符,前面加上数字可以指定移动到以上 n 行 n+ 加号移动到下一行的第一个非空白字符,前面加上数字可以指定移动到以下 n 行 nG 直接用数字 n 加上 G 移动到第 n 行 fx 往右移动到 x 字符上 Fx 往左移动到 x 字符上 tx 往右移动到 x 字符前 Tx 往左移动到 x 字符前 ; 配合 f&t 使用,重复一次 , 配合 f&t 使用,反方向重复一次 /string 往右移动到有 string 的地方 ?string 往左移动到有 string 的地方 n 配合 /&? 使用,重复一次 N 配合 /&? 使用,反方向重复一次 % 移到匹配的”()”或”{}”上 n( 左括号移动到句子的最前面,前面加上数字可以指定往前移动 n 个句子 句子是以! . ? 三种符号来界定 n) 右括号移动到下个句子的最前面,前面加上数字可以指定往后移动 n 个句子 段落是以段落间的空白列界定 n{ 左括弧移动到段落的最前面,前面加上数字可以指定往前移动 n 个段落 n} 右括弧移动到下个段落的最前面,前面加上数字可以指定往后移动 n 个段落 这些编辑命令非常有弹性,基本上可以说是由命令与范围所构成。例如 dw 是由删除指令d 与范围 w 所组成,代表删除一个字 d (elete) w (ord) 。命令列表如下: d 删除(delete) y 复制(yank) p 放置(put) c 修改(change) 范围可以是下列几个: e 光标所在位置到该字的最后一个字母 w 光标所在位置到下个字的第一个字母 b 光标所在位置到上个字的第一个字母 $ 光标所在位置到该行的最后一个字母 0 光标所在位置到该行的第一个字母 ) 光标所在位置到下个句子的第一个字母 ( 光标所在位置到该句子的第一个字母 } 光标所在位置到该段落的最后一个字母 { 光标所在位置到该段落的第一个字母 2.5.4 文件处理子命令 :q 结束编辑(quit) 如果不想存档而要放弃编辑过的档案则用 :q! 强制离开。 :w 存档(write) 其后可加所要存档的档名。 可以将档案命令合在一起,例如 :wq 即存档后离开。 zz 功能与 :wq 相同。 :n 开始编辑vi激活的文件列表中的下一个文件。 :n filename 指定被编辑的新的文件。 :e filename 在vi中编辑另一个文件filename。 :e # 开始编辑另一个文件。 :e ! 重新装入当前文件,如果当前文件有改动,则丢弃以前的改动。 :r filename 将文件filename合并至当前文件的文件尾。 另外值得一提的是 vi 的部份存档功能。可以用 :n,m w filename 将第 n 行到第 m 行 的文字存放的所指定的 filename 里去 2.6 超经典的AIX系统管理手册之四(AIX存储管理) 第四章 存储管理 2.6.1 相关术语 PV (Physical Volume) 物理卷,指物理磁盘,是系统的主要存储设备,可以是内部的、外接的或是活动的。它实际上是由物理磁盘内顺序排列的物理分区组成的。 VG (Volume Group) (物理)卷组,是若干个(1-32)物理卷的集合。卷组中可以包括不同类型的磁盘。一个物理卷只能属于一个卷组。系统中可以有最多不超过255个的卷组。 www.ixdba.net PP (Physical Partition) 物理分区,是磁盘空间分配的最小单位。它是1MB-256MB( 若PP>1M,则必须是4兆的倍数)的一块连续的磁盘空间。同一卷组中所有物理卷上物理分区的大小必须相同,一个物理卷中最多可有1016个PP。 LP (Logical Partition) 逻辑分区,可以由1-3个物理分区(PP)组成。通常情况下,LP和PP是一一对应的,但是当对LP做了镜像时,一个LP就可能对应2-3个PP了。逻辑分区中的物理分区可以来自不同的物理卷。 LV(Logical Volume) 逻辑卷,由若干个逻辑分区(不超过35512个LP)组成,可供程序作为一个设备使用,用户可将其视作一块可使用的空间或一个磁盘。确切讲,一个LV就是PV上的区域的映象。逻辑卷可以由不连续的物理分区组成,而且物理分区可以来自不同的物理卷。由于一个逻辑分区可以映射到多个物理卷上,因此它可以占有比任何一个物理卷都大的空间。一个VG中可以存在不超过256个的LV。它通常用于建立文件系统,也可用作Pagine Space 、JFSLOG 或是作为裸设备供数据库系统使用。 Mirror(镜像) 镜像指的是对存放在逻辑块上的数据的复制。AIX可以做单镜像(将数据置成两份来存放),也可以做双镜像(做三份存放),一般情况下,系统是不作镜像的,当需要时,可以为高有效性或高速运行而做数据镜像。 为高有效性而作的镜像用来解决因为介质缺损、严重的驱动失效或控制器故障等而引起数据失效之类的问题。通过镜像数据,LVM可以透明地由数据备份处恢复丢失的数据。 对于读操作,为数据块建立多个拷贝使数据访问比没有磁盘镜像时要快,这些备份数据块可以被并发的读要求所访问。而对写操作,系统将产生写镜像的双重请求。它可以顺序地执行,也可以并行执行。顺序写镜像时,系统写完一个PP后,再写下一个PP,这种方法的可靠性较好,能保证在系统崩溃时,至少有一个副本是好的,但它的效率很低。并行写镜像时,系统同时对一个LP所对应的所有PP进行写操作,这种方法虽然降低了系统的写安全性,但写速度提高了。 总之,镜像并不总是获得高性能的最好方法。只有当数据的镜像是为了频繁的读访问而不是写访问这个目的时,才有意义。 VGDA(Volume Group Description Area,卷组描述区) VGDA存在于每一个PV的开始处,用于描述该PV所属的VG所包含的所有LV和PV信息。VGDA的存在使得每一个VG都可以自我描述。每个PV上VGDA的个数随组成该VG的PV个数的不同而不同: 若VG中包含单个PV,则该PV上有两个VGDA; 若VG中包含两个PV,则一个PV上有两个VGDA,另一个PV上有一个VGDA; 若VG中包含三个或三个以上的PV,则每个PV上都有一个VGDA。 这里介绍一下Quorum。Quorum用来指定为保持系统中某个VG的激活状态而必须可用的VGDA的数目。通常,当系统中>51%的VGDA可用时,这些VGDA所属的VG才能保持激活状态,否则,该VG将自动被varyoff以禁止对该VG的任何操作。 VGSA(Volume Group Status Area,卷组状态区) 用于描述一个VG中所有的PP和PV的状态信息。 2.6.2 PV的管理 硬盘安装 1 带防静电手链。将手链带在手上,将另一端连的接地的金属物上 ! 2           卸下前挡板。正对机器,会看到前面中上位置处有一银白色金属片,边上用锣丝固定。用工具将其取下。将会看到机器上面有硬盘安装说明图例。机器里面有硬盘。由硬盘架固定。硬盘上有一蓝色拉手。用力拉此拉手可把硬盘拨出。 3           将硬盘上的蓝色拉手拉出,对准硬盘架,推进,直至把拉手也完全推进。 将金属片装上,用锣丝拧紧。 2.6.2.1 配置一个PV 一块硬盘只有当它被标识为一个PV并被加入某个VG后,该硬盘才可用。假设系统刚刚由IBM工程师添加了一块新的硬盘,或是系统管理员需要重新配置一块已被删除了(通过rmdev命令或smit菜单选项)的硬盘,管理员可以通过命令“cfgmgr”使得新硬盘变得可用(注:系统启动时,该命令会自动被运行)。如果此时管理员可以通过lspv命令看到该pv的PVID, IXDBA.NET技术社区   # lspv hdisk0 000cd60d520a23a9 rootvg hdisk1 000cd60d8a7b8d98 orclvg # 则该硬盘hdisk1已经可以通过LVM进行进一步的配置了,否则的话,我们还需要通过如下命令将该硬盘定义成一个PV: #chdev -l hdisk1 -a pv=yes 2.6.2.2 修改PV的属性 1.              使一个PV变得不可用: # chpv –v r PVNAME 2.              使一个PV可用: # chpv –v a PVNAME 3.              允许/禁止在一个PV上分配空间 # chpv –a y PVNAME (允许) # chpv –a n PVNAME (禁止) 2.6.2.3 删除一个PV 1.              使一个PV由“Active”状态变为“Available” # rmdev –l PVNAME 2.使一个PV由“Active”状态变为“Defined” # rmdev –l PVNAME -d 2.6.3 VG的管理 2.6.3.1 创建一个VG 以root用户或拥有root权限的用户登陆,在命令行提示符下键入命令:smitty mkvg ,系统将出现如下的菜单: Add a Volurne Group   Type or select Values in eutry fields. Press Enter AFTER making all desired changes.   [Entry Fields]   Volume Group name [ extendvg]   physical partition SIZE in mega bytes 4 + ☆ physical Volume names [hdisk1 hdisk2] + Activate volume group AUTO MATICAUY Yes + at system restart? ☆ Activate Volume group after it is Yes + created     Volume Group major Number [ ] www.ixdba.net +#   在“Volume Group name”域输入自定义的卷组名字,并规定该卷组中每一个物理分区(PP)的大小,指定卷组所包含的物理卷,注意,没有加过物理卷标识(Identify)的硬盘不可以加入一个卷组。 2.6.3.2 删除一个VG 要删除一个VG,可以以root用户或拥有root权限的用户登陆,在命令行提示符下键入命令: smitty reducevg 或通过“reduce”命令删去一个VG中的一个或多个PV。如: # reduce VGNAME PVNAME1 PVNAME2 当一个VG中所有的PV都被删除时,该VG将自动被删除。 2.6.3.3 对VG的管理 (1) 当检查系统中所有卷组时,输入: #lsvg 显示系统中所配置的所有卷组的名字。 # lsvg rootvg orclvg #lsvg -o 显示系统中所有激活的卷组的名字。 # lsvg -o orclvg rootvg # (2) 当检查某个卷组的特性时,输入: #lsvg VGNAME 屏幕将显示关于 该VG的详细资料。 # lsvg rootvg   VOLUME GROUP: rootvg VG IDENTIFIER: 000cd60d00004c00000000f4520a36a1 VG STATE: active PP SIZE: 64 megabyte(s) VG PERMISSION: read/write TOTAL PPs: 542 (34688 megabytes) MAX LVs: 256 FREE PPs: 141 (9024 megabytes) LVs: 30 USED PPs: 401 (25664 megabytes) OPEN LVs: 9 QUORUM: 2 TOTAL PVs: 1 VG DESCRIPTORS: 2 STALE PVs: 0 STALE PPs: 0 ACTIVE PVs: 1 AUTO ON: yes MAX PPs per PV: 1016 MAX PVs: 32 LTG size: 128 kilobyte(s) AUTO SYNC: no HOT SPARE: no (3) 当检查有关卷组的物理卷信息时,运行命令: #lsvg -p VGNAME # lsvg -p rootvg rootvg: PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION hdisk0 active 542 141 00..00..00..32..109 www.ixdba.net # lsvg rootvg VOLUME GROUP: rootvg VG IDENTIFIER: 000cd60d00004c00000000f4520a36a1 VG STATE: active PP SIZE: 64 megabyte(s) VG PERMISSION: read/write TOTAL PPs: 542 (34688 megabytes) MAX LVs: 256 FREE PPs: 141 (9024 megabytes) LVs: 30 USED PPs: 401 (25664 megabytes) OPEN LVs: 9 QUORUM: 2 TOTAL PVs: 1 VG DESCRIPTORS: 2 STALE PVs: 0 STALE PPs: 0 ACTIVE PVs: 1 AUTO ON: yes MAX PPs per PV: 1016 MAX PVs: 32 LTG size: 128 kilobyte(s) AUTO SYNC: no HOT SPARE: no # (4) 当检查有关卷组的逻辑卷信息时,运行命令: #lsvg -l VGNAME # lsvg -l rootvg rootvg: IXDBA.NET社区论坛 LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT hd5 boot 1 1 1 closed/syncd N/A hd6 paging 32 32 1 open/syncd N/A hd8 jfslog 1 1 1 open/syncd N/A hd4 jfs 2 2 1 open/syncd / hd2 jfs 11 11 1 open/syncd /usr hd9var jfs 1 1 1 open/syncd /var hd3 jfs 1 1 1 open/syncd /tmp hd1 jfs 1 1 1 open/syncd /home hd10opt jfs 1 1 1 open/syncd /opt sybase jfs 64 64 1 open/syncd /usr/sybase SYBMaster jfs 2 2 1 closed/syncd N/A SYBTEMPDB jfs 16 16 1 closed/syncd N/A SYBDATADEV jfs 64 64 1 closed/syncd N/A SYBV6Data jfs 32 32 1 closed/syncd N/A IXDBA.NET技术社区 SYBV6Log jfs 7 7 1 closed/syncd N/A ora_big5_sys jfs 5 5 1 closed/syncd N/A ora_big5_temp jfs 8 8 1 closed/syncd N/A ora_big5_user jfs 8 8 1 closed/syncd N/A ora_big5_tools jfs 1 1 1 closed/syncd N/A ora_big5_rlbk jfs 5 5 1 closed/syncd N/A ora_big5_redo1 jfs 1 1 1 closed/syncd N/A ora_big5_redo2 jfs 1 1 1 closed/syncd N/A ora_big5_redo3 jfs 1 1 1 closed/syncd N/A ora_big5_ctrl1 jfs 1 1 1 closed/syncd N/A ora_big5_ctrl2 jfs 1 1 1 closed/syncd N/A ora_big5_ctrl3 jfs 1 1 1 closed/syncd N/A ora_big5_drsys jfs 1 1 1 closed/syncd N/A ora_big5_xdb jfs 1 1 1 closed/syncd N/A ora_big5_index jfs 2 2 1 closed/syncd N/A IXDBA.NET社区论坛 sybase_lv jfs 128 128 1 closed/syncd N/A # (5) varyonvg / varyoffvg varyonvg VGNAME : 使VG可用 varyoffvg VGNAME : 使VG不可用 (6) importvg / exportvg 有时用户可能需要将一个VG由一个系统移到另一个系统中,以便另一个系统的用户能够访问该VG上的LV及文件系统。为达到此目的,需要: 1.              在原系统中执行:exportvg VGNAME 2.              在目标系统中执行:importvg VGNAME PVNAME (注:在HACMP的配置过程中,不一定需要将原VG作export。) 用户可以通过 smitty chvg 实现对VG属性的各种修改。 2.6.4 LV的管理 2.6.4.1 增加一个LV 超级用户在命令行下键入:smit mklv 系统将出现如下画面: Add a Logical Volume   Type or select a value for the entry field. Press Enter AFTER making all desired changes.   [Entry Fields] * VOLUME GROUP name []   Esc+1=Help Esc+2=Refresh Esc+3=Cancel Esc+4=List Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image Esc+9=Shell Esc+0=Exit Enter=Do 输入需增加的LV 所在的VG 名。这个域是必须输入的,可以用ESC+4或F4 键列出可用的卷组进行选择,随后屏幕将出现:     Add a logical Volume www.ixdba.net   Type or Select values in entry fields. Press Enter AFTER making all desired chaueges.   [TOP] [Entry Fields]   Logical Volume NAME [tmcs] * VOLUME GROUP name extendug * number of Logical Partitions [68] #   PHYSICAL VOLUME names [] +   Logical Volume TYPE [jfs]   POSITION on Physical Volume outer-middle +   RANGE of physical volumes minimum   MAXIMUM NUMBER of PHYSICAL VOLUMES to use for allocation [] #   Number of COPIES of each logical partition 1 +   Mirror Write Comistancy? Yes + SEPARATE phyical Volume?   RELOCATE the logical volume during reorgaritation? Yes + www.ixdba.net   Logical volume LABEL [ ]   MAXIMUM NUMBER OF LOGICAL PARTITIONS [ 128 ]     其中,做单镜像,“Number of Copies of Logical partition”值为2,做双镜像,此值为3,为1时,表示不需要做镜像;当使用的空间多于128个分区时应修改“Maximum Number of logical partition”;其他参数一般不用修改。 2.6.4.2 修改LV的属性 当要对一个逻辑卷(LV)作修改时,输入命令smit chlv Change a Logical Volume   Move cursor to desired item and press Enter.   Change a Logical Volume Rename a Logical Volume         Esc+1=Help Esc+2=Refresh Esc+3=Cancel Esc+8=Image Esc+9=Shell Esc+0=Exit Enter=Do     移动光标修改相应的域,例子中蓝色,后ENTER。如下所示: Change a Logical Volume   Type or select a value for the entry field. Press Enter AFTER making all desired changes.   [Entry Fields] * LOGICAL VOLUME name [] Esc+1=Help Esc+2=Refresh Esc+3=Cancel Esc+4=List Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image Esc+9=Shell Esc+0=Exit Enter=Do 在* LOGICAL VOLUME name 后的方括号内输入LV名,或选中* LOGICAL VOLUME name ,按下Eac+4,出现LV列表,如下: Change a Logical Volume   Ty+--------------------------------------------------------------------------+ Pr| LOGICAL VOLUME name | | | IXDBA.NET技术社区 | Move cursor to desired item and press Enter. Use arrow keys to scroll. | * | | | [TOP] | | uploadlg jfs 128 128 1 open/syncd /upload | | loglv00 jfslog 1 1 1 open/syncd N/A | | Ora_bin jfs 96 96 1 open/syncd /usr/ora | | master1 jfs 1 1 1 closed/syncd N/A | | ora_system_vg jfs 5 5 1 open/syncd N/A | | ora_temp_vg jfs 8 8 1 open/syncd N/A | | ora_user_vg jfs 160 160 1 open/syncd N/A | IXDBA.NET社区论坛 | ora_tools_vg jfs 1 1 1 open/syncd N/A | | ora_rollback_vg jfs 5 5 1 open/syncd N/A | | ora_redolog_1 jfs 1 1 1 closed/syncd N/A | | ora_redolog_2 jfs 1 1 1 open/syncd N/A | | [MORE...50] | | | Esc+1=Help Esc+2=Refresh Esc+3=Cancel | Es| Esc+8=Image Esc+0=Exit Enter=Do | Es| /=Find n=Find Next | Es+--------------------------------------------------------------------------+ 选中要修改的LV,ENTER   [TOP] [Entry Fields] * Logical volume NAME jfs 1 1 1 sybase_lv Logical volume TYPE [jfs] + www.ixdba.net POSITION on physical volume middle + RANGE of physical volumes minimum + MAXIMUM NUMBER of PHYSICAL VOLUMES [32] # to use for allocation Allocate each logical partition copy yes + on a SEPARATE physical volume? RELOCATE the logical volume during yes + reorganization? Logical volume LABEL [None] MAXIMUM NUMBER of LOGICAL PARTITIONS [512] # SCHEDULING POLICY for reading/writing parallel + logical partition copies [MORE...4]   c+1=Help Esc+2=Refresh Esc+3=Cancel Esc+4=List Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image Esc+9=Shell Esc+0=Exit Enter=Do 各项参数可修改。 IXDBA.NET社区论坛   注意:在AIX系统中,LV空间的大小只可增大,不可减小,因此在作LV的增加时应小心操作。但如果一个用户定义的LV空间确实过大,需要缩小时,我们可以采用下面的办法来解决这个问题。 首先,将原LV上的内容做好备份;然后将该LV删除;接着创建一个大小符合要求的LV,再将原LV上的内容恢复进去。 2.6.4.3 删除一个LV 当需要删除一个LV时,键入 :smit rmlv 输入欲去除的LV名字,回车并确认即可。   Remove a Logical Volume   Type or select values in entry fields. Press Enter AFTER making all desired changes.   [Entry Fields] LOGICAL VOLUME name [] +   F1=Help F2=Refresh F3=Cancel F4=List Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image Esc+9=Shell Esc+0=Exit Enter=Do   Esc+3 lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk Press Entex LOGICAL VOLUME name x x x x Move cursor to desired item and press Enter. Use arrow keys to scroll. x LOGICAL x x + www.ixdba.net x [TOP] x x uploadlg jfs 128 128 1 open/syncd /upload x x loglv00 jfslog 1 1 1 open/syncd N/A x x Ora_bin jfs 96 96 1 open/syncd /usr/ora x x master1 jfs 1 1 1 closed/syncd N/A x x ora_system_vg jfs 5 5 1 open/syncd N/A x x ora_temp_vg jfs 8 8 1 open/syncd N/A x x ora_user_vg jfs 160 160 1 open/syncd N/A x IXDBA.NET社区论坛 x ora_tools_vg jfs 1 1 1 open/syncd N/A x x ora_rollback_vg jfs 5 5 1 open/syncd N/A x x ora_redolog_1 jfs 1 1 1 closed/syncd N/A x x ora_redolog_2 jfs 1 1 1 open/syncd N/A x x ora_redolog_3 jfs 1 1 1 closed/syncd N/A x x [MORE...49] x x x x F1=Help F2=Refresh F3=Cancel x F1=Help x Esc+8=Image Esc+0=Exit Enter=Do x Esc+5=Resex /=Find n=Find Next x Esc+9=Shelmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq   选中要删除的LV,ENTER,ENTER。 2.7 超经典的AIX系统管理手册之五(RS6000 更换硬盘的过程) 来源: www.ixdba.net 作者: IXDBA.NET官方 时间:2008-04-01 阅读:142 第五章 RS6000 更换硬盘的过程 HDISK0和HDISK1做成MIRROR,是ROOTVG #mirrorvg rootvg hdisk0 hdisk1 先做系统备份 tctl –f /dev/rmt0 rewind smitty mksysb 查看HDISK0的S/N,P/N号等,在换盘的时候做对照 lscfg –vl hdisk0 IXDBA.NET技术社区 #lscfg -vl hdisk0 DEVICE LOCATION DESCRIPTION hdisk0 11-08-00-2,0 16 Bit LVD SCSI Disk Drive (36400 MB) Manufacturer................IBM Machine Type and Model......IC35L036UCDY10-0 FRU Number..................00P3831 ROS Level and ID............53323154 Serial Number...............E3V59K0B EC Level....................H32224 Part Number.................08K0293 Device Specific.(Z0)........000003029F00013A Device Specific.(Z1)........07N4972 Device Specific.(Z2)........0068 Device Specific.(Z3)........02305 Device Specific.(Z4)........0001 Device Specific.(Z5)........22 Device Specific.(Z6)........********** 查看物理卷 lspv 查看逻辑卷组 lsvg 查看在用的逻辑卷组 lsvg –o # lsvg -o orclvg rootvg # 查看所有硬盘(包括逻辑盘)的状态 # lsdev -Cc disk hdisk0 Available 11-08-00-2,0 16 Bit LVD SCSI Disk Drive hdisk1 Available 11-08-00-4,0 16 Bit LVD SCSI Disk Drive # 查看7133磁盘柜硬盘状态 lsdev –Cc pdisk 停HACMP smitty clstop 使用lsvg –o 命令会看不到一些(应用)VG(1号机会接管);使用 netstat –ir命令可以看到系统SVC地址会变成BOOT地址 把HDISK0从ROOTVG中不做MIRROW unmirrorvg rootvg hdisk0 查看物理卷 lspv 这时HDISK0不在和HDISK1为MIRROR 把hdisk0从rootvg中去除 reducevg rootvg hdisk0 在HDISK1上创建boot image bosboot –ad hdisk1 改变启动设备的顺序 bootlist –m normal hdisk1 cd0 删除HDISK0 rmdev –l disk0 –d lspv lscfg –vl hdisk0 以上2条命令不会显示HDISK0的相关信息 关机 shutdown –F 把2号机的外设机箱取出,更换硬盘。注意要标好各电缆的位置 开机 lspv 发现多出HDISK4,而我们需要的是HDISK0 删除HDISK4 rmdev –l hdisk4 –d cfgmgr lspv 发现多出HDISK0,HDISK4,可能是我前面删除HDISK0,没有做cfgmgr的原因 删除HDISK4,HDISK0 rmdev –l hdisk4 –d rmdev –l hdisk0 –d cfgmgr lspv 好了,HDISK0出现了 把HDISK0加到ROOTVG中并做镜像 extendvg rootvg hdisk0 做MIRROR mirrorvg –c 2 rootvg 查看PV lspv OK 在HDISK0,HDISK1上创建boot image bosboot –ad hdisk0 bosboot –ad hdisk1 改变启动设备的顺序 bootlist –m normal hdisk0,hdisk1 cd0 重启动2号机 shutdown –Fr 关闭1号机的HACMP Smitty clstop 重启动1号机 shutdown –Fr 启动1号机的HACMP smitty clstart 启动2号机的HACMP smitty clstart 一切OK 注意 可观察CLUSTER的启动:/usr/es/adm/cluster.log, /tmp/hacmp.out CLUSTER的版本 lslpp –l|grep cluster 网络的状态 netstat -ni 2.8 超经典的AIX系统管理手册之六(HACMP安装配置) 来源: www.ixdba.net 作者: IXDBA.NET官方 时间:2008-04-01 阅读:174 本文章共18763字,分19页,当前第1页,快速翻页:12345678910111213141516171819 第六章 HACMP安装配置 2.8.1 准备工作 (1) HACMP相应安装CD。 (2) AIX安装CD。 (3) RM0X补丁CD或最新download的补丁。 (4) SSA Adapter和Disk的微码。 IXDBA.NET技术社区 www.hursley.ibm.com/ssa/rs6k/ (5) IP地址。 (6) VG、LV、FS用于HA的配置计划。 (7) 了解跑什么应用,Start/Stop Script应该怎么写。 . 确认7133阵列、8port卡和心跳线已连好,机器启动完毕 . 检查每台机器上是否都找到了所有硬盘 lspv lsdev –Cc disk 如果某台机器没有找到共享硬盘,可用cfgmgr命令。 cfgmgr . 给系统添加TTY 如果安装了8port卡,一共应该有sa0 ~ sa4共5个tty,依次(0 ~ 4)安装。 smitty tty à Add a TTY à rs232 à saX à Port Number: 0 NOTES: 1. 如果使用串行口连心跳线,只能用sa3(即串口4)。 2. 串口4一般位于4个串口的右下一个。 检测连8port卡的TTY 在两台机器上同时运行: stty < /dev/tty0 这时应该有信息显示。 . 安装Bundle: App_Dev; Client, Server smitty easy_install 使用AIX安装CD安装文件 smitty installp à Line 1 选择: bos.dosutility bos.data X11.vsm* (只在装HA时选择了vsm包时需要) . 安装Base Document smitty installp à Line 1 选择: bos*; perfagent*   安装系统补丁 使用AIX UPDATE CD 选择: bos.adt*   修改.profile和.dtprofile文件 修改: .dtprofile: DTSOURCEPROFILE=true IXDBA.NET社区论坛 .profile: export PS1=’[’`hostname`’:$PWD]’   修改电源管理 lscfg –vpl pmc0 应该有显示。 smitty pm à Line 2 à Line 2 (Unconfig) Netscape安装和配置 确认Netscape已安装。 确认docsearch可以运行。 这是基于Netscape的AIX帮助系统。 建立/.netscape文件系统,大小约为10M。   安装HACMP/ES软件 放入HACMP/ES光盘: smitty installp à Line 1 选择: cluster.adt.es cluster.doc.en_US cluster.doc.en_US.es cluster.es cluster.es.clvm (for HACMP/ES CRM) cluster.es.cspoc cluster.es.hc (for HACMP/ES CRM) cluster.es.taskguides IXDBA.NET技术社区 cluster.man.en_US.es cluster.msg.En_US.cspoc cluster.msg.En_US.es cluster.msg.en_US.cspoc cluster.msg.en_US.es (有关es的全部)   安装最新的AIX和HACMP补丁 创建一个临时文件系统,将文件上载到机器上: smitty update_all (次命令将只升级当前系统中存在的软件包) www.ixdba.net   SSA微码升级 使用以下命令可以看到一些设备的微码状态: lscfg –vl | grep ssa0 看SSA卡微码(ROS要升到A400才可以) lscfg –vp | grep –p ROM 看系统微码 将下载的微码解压到硬盘: tar –xvf XXX 运行smitty installp安装相应文件包。 运行cfgmgr –v让系统重新识别,自动完成SSA Adapter升级。 使用diag命令履行硬盘微码升级。 l 设置主机名 smitty hostname à Line 1 同时修改/etc/hosts文件(在两台机器上分别改): 127.0.0.1 loopback localhost jmnx1   l 为所有网卡绑定boot或standby的IP地址 smitty mktcpip à 选网卡en1à 设置hostname和IP;Start Now = Yes IXDBA.NET社区论坛 注意service地址不在此时设置。   NOTES: 1.     这里hostname不是刚才设置的hostname。boot和standby网卡要对应不同hostname。以下是一个范例(典型的一组HA)。 IP hostname 1.1.1.1                                                       jmnx1_svc 1.1.1.2                                                       jmnx1_boot 1.1.2.1                                                       jmnx1_stby 1.1.1.3                                                       jmnx2_svc 1.1.1.4                                                       jmnx2_boot 1.1.2.2                                                       jmnx2_stby 2.     以上这些内容都要写入两台机器的/etc/hosts文件。 注意这个文件很容易被系统自动改动,安装配置HA时必须经常检查。 IXDBA.NET技术社区 3.     检查/.rhosts,这个文件应记录上述所有hostname。 4.     分辨网卡位置: 内置网卡标号enX最大; 外置网卡标号从机箱背后看由左到右依次增大。 5.     如果要修改IP设置,可使用: rmdev –dl enX 删掉网卡 smitty inet à Add a Network Interface à Add a Standard Ethernet Interface à 选entX,重新设置。Current State改为Up 6.     开机未启HA时,boot地址生效; 启动HA后,service地址生效; service地址对应网卡失效后,由standby地址接管。 7.     IP地址设置规则: service和boot在同一网段; standby必须与上面两者在不同网段;   l 创建VG、LV和FS 这些工作只需在一台机器上做,在另一台机器上必须先删去所有pdisk。 rmdev –dl hdiskX 注意先用lsdev –Cc disk看一下,不要把内置硬盘也删掉。 创建RAID。 注意要Enable Fast Read/Write 创建VG。 smitty mkvg à Activate VG automatically at system restart: No Create VG Concurrent Capable: Yes/No (是/否concurrent) www.ixdba.net Auto-varyon in Concurrent Mode: No smitty chvg à QUORUM Yes/No 创建LV和FS(FS不要Auto Mount)。 在一台机器上varyonvg再varyoffvg所有共享或接管VG。 在另一台机器上importvg。 importvg –y VGName hdiskX (hdiskX为该VG中任何一个盘) smitty chvg 修改VG为Not Auto-varyon varyonvg VGName varyoffvg VGName   NOTE: 1.   HA未启动时,一旦由一台机器改变了共享或接管VG的结构(LV、FS级),则另一台机器一定要exportvg该VG后再次importvg才能使用。 www.ixdba.net 2.   如果共享或接管VG不止一个,则: smitty mkvg时要指定Major Number; importvg时对同一VG要指定与上面相同的Major Number: importvg -V MajorNum ... l 修改系统参数 Extend the size of file system "/var" to 200M. Change characteristics of aio smitty chgaio MINIMUM number of servers [20] MAXIMUM number of servers [40] STATE to be configured at system restart available State of fast path enable Change characteristics of Operating System smitty chgsys Maximum number of PROCESSES allowed per user [512/1024] HIGH water mark for pending write I/Os per file [33] LOW water mark for pending write I/Os per file [24] Change syncd frequency smitty cm_tuning_parms syncd frequency (in seconds) [10] IXDBA.NET社区论坛 Change number of licensed users smitty chlicense Maximum number of FIXED licenses [512] Enable Fast-Write for SSA smitty ssadlog   l 重启两台机器 shutdown -Fr 2.8.2 配置HACMP smitty hacmp (1)  Add Cluster Cluster ID: 1 Cluster Name: XXX (2)  Add Node Node Name: jmnx1 jmnx2 注意应该是第14点中对应的hostname。 (3)  Add Adapter (IP) 给所有在/etc/hosts中定义过的svc/boot/stby添加一个IP Adapter。 service adapter在boot/standby之后定义,不然会修改/etc/hosts。 IP Label: See /etc/hosts N/W Type: ether N/W Attribute: public Adapter Function: service/standby/boot Adapter Identifier: 即相应IP地址 IXDBA.NET社区论坛 即netstat –in显示中相应网卡的Address一栏,但最后两位必须不同。 如系统显示:0.6.29.6c.13.9a,可以填:0.6.29.6c.13.11 注意以上两项只需一个,且只有service adapter需用H/W Address。 Node Name: jmnx1或jmnx2等 注意rotating方式中定义service adapter时,此项应该空着,表示这个service IP label为两台机器共享。 (4)  Add Adapter (TTY) e.g.: tty_a; rs232(网络类型); rs232_net(自定网络名); serial; service; /dev/tty3; (空); jmnx1 (5)  Sync Topology (6)  Add Resource Group RG Name: XXX(应用服务名) Node Relationship: cascading/concurrent/rotating Participate Nodes: Jmnx1 Jmnx2 注意书写先后表示优先级,即初始该RG为哪个Node所有。 (7)  Add Application Server Server Name: XXX Start Script: /tmp/...(自定) Stop Script: /tmp/...(自定) Edit executable files: “startapp” & “stopapp” to certain directory and copy to the same position of the other machine. 注意script中的banner语句并不一定能在hacmp.out中有输出,为了验证其确实已被运行,可以在其中加上诸如date > file等的写文件语句。 (8)  Change Resource Attribute of a RG IP Label 用service IP label,如apps_svc, pbxc_svc等, FS: XXX 设置启动HA或接管时自动mount的file system。 VG: XXX 设置启动HA或接管时自动varyon的VG。 注意VG可选择相应的资源也可以空着,但两个RG不能使用同一个VG。 (9)  Sync RG   NOTES: 1.  HA启动后,除非共享或接管VG有disk 一级的变动(增加/减少硬盘),一般不需要手动去同步两边VG。 2.  当Topology有了修改之后,不但要Sync Topology,还要Sync RG。 3.  双机单组HA中三种方式的比较: www.ixdba.net TYPE SERVICE IP ADAPTER NUM. SERVICE IP LABEL rotating 1 1 cascading 2 2 and 1 is required for each RG concurrent 2 concurrent RG时,不要填IP label。rotating中只有一个共享svc IP,就填这一个即可。 4.  配置内容示例: Configure HACMP for Rotating Resource Group Define Cluster Topology Define 1 cluster, 2 nodes, 2 boot adapter, 1 IP service adapter, 2 standby adapter, 2 serial service adapter. Synchronize the cluster topology. Define Resources IXDBA.NET社区论坛 Define 1 rotating resource group with 2 participating nodes. Define 1 application server and write corresponding start and stop scripts. Configuring Resource for Resource Group Add Service IP Label, Filesystems, Volume Groups, Application Servers into Resource Group. Synchronize cluster resource. Configure HACMP for Concurrent Resource Group Define Cluster Topology Define 1 cluster, 2 nodes, 2 boot adapter, 2 service IP adapter, 2 standby adapter, 2 serial service adapter. Synchronize the cluster topology. Define Resources Define 1 concurrent resource group and 2 cascading resource group. Define 2 application server and write corresponding start and stop scripts. Configuring Resource for Resource Group Add concurrent shared VGs to concurrent resource group. Separately add 2 service IP adapter, 2 application server to 2 cascading resource group. 2.8.3 HA测试(一): 启动和关闭 在Concurrent中确保VG在两边都被varyoff smitty clstart 启动HA tail –f /tmp/hacmp.out 看启动输出信息 tail –f /tmp/cm.log 看错误信息 netstat –i 和 –in 看IP地址是否变为service地址 lsvg –o Concurrent中看VG是否在两台机器上被varyon lssrc –g cluster 看相应SRC是否起来(应该显示2或3个SRC) IXDBA.NET社区论坛 smitty clstop 关闭HA à graceful(正常)/takeover(接管)/force(强制,IP不变回boot) 这里就选graceful tail –f /tmp/hacmp.out 看关闭输出信息 tail –f /tmp/cm.log 看错误信息 netstat –i 和 –in 看IP地址是否变为boot地址 lssrc –g cluster 看相应SRC是否已关闭(应该无SRC显示) 使用Cluster Snapshot可以保存当前Cluster配置,以后直接Apply就可恢复。   2.8.4 HA测试(二):本机IP接管 确定两台机器HA已正常启动。 www.ixdba.net 拔去与主机service IP关联的网卡的网线。 在主机上运行: netstat –i 和 –in 这时standby网卡将接管service IP而原service网卡将对应standby IP。 备机不发生任何反应。 插回主机上拔去的网线并运行: netstat –i 和 –in 这时主机没有任何复原动作,原standby网卡仍对应service IP而原service网 卡仍对应standby IP,即便关闭HA也不会变回来。   en0 en1 启动HA前对应IP boot stdby 启动HA后对应IP svc stdby 拔去en0网线后对应IP stdby svc 关闭HA后对应IP stdby boot www.ixdba.net   要使网卡恢复最初的对应IP,可以运行: smitty mktcpip 选定网卡(en0, en1, ... ),不作任何改动回车。   2.8.5 HA测试(三):资源接管 确定两台机器HA已正常启动。 模拟主机异常终止运行: 方法一:主机上运行: smitty clstopà 关闭方式选takeover 这种测试是主动告诉对方需要接管,并不是真正模拟了故障,可以 在进行真正故障模拟之前先进行这一步测试。 方法二:主机上运行halt –q即时关机(最佳方法)。 方法三:同时拔去主机所有网线和心跳线。 方法四:主机拔电(不建议)。 IXDBA.NET技术社区 在备机上运行: netstat –i 和 –in 如果备机也有service网卡(在cascading,即mutual takeover配置下),这时备机 的standby网卡将接管主机的service IP; 如果备机没有service网卡(在rotating,即standby配置下),这时备机的boot网 卡将接管主机的service IP。   当备机有svc地址: 备机en0 备机en1 启动HA前对应IP 备机boot 备机stdby 启动HA后对应IP 备机svc 备机stdby 发生接管后对应IP 备机svc 主机svc IXDBA.NET技术社区   当备机无svc地址: 备机en0 备机en1 启动HA前对应IP 备机boot 备机stdby 启动HA后对应IP 备机boot 备机stdby 发生接管后对应IP 主机svc 备机stdby   在备机上运行: IXDBA.NET社区论坛 lsvg –o 在resource group中定义的VG应该在备机上自动varyon。 在备机上运行: mount 在resource group中定义的FS应该在备机上自动mount。   NOTES: 1.   运行smitty clstop后有3种停止方式可供选择: graceful 本机正常退出HA环境,恢复boot地址。不发生接管。 takeover 本机正常退出HA环境,恢复boot地址。发生接管,备机获得主机svc IP。 force 本机强制退出HA环境,不恢复boot地址。不发生接管。 当用graceful方式无法完全退出HA环境时(即lssrc –g cluster仍能看到显示,并 且svc IP没有变回boot IP),可以用force退出。 force退出以后lssrc –g cluster不会看到显示,但svc IP也不会变回boot IP,必须 手工运行一次smitty mktcpip(不改任何选项)。 2.   如果将一台机器的两根网线都拔掉,则备机并不会接管该机器的svc IP。 因为备机仍可以通过心跳线监测到主机存活。而对于网络来说,HA只防备单点故障,如果主机上两个网络都断了,它没有响应的能力。 如果要模拟接管,则必须将心跳线也拔掉。 2.9 超经典的AIX系统管理手册之七(模拟硬盘更换) 第七章 模拟硬盘更换 2.9.1 预做方案 630机器,内置4个18G硬盘,2个做RAID,存储数据,一块做系统,另一块做热备。因数据量增大,要扩充硬盘容量,将18G数据存储盘换成36G。 查看硬盘信息 # lspv hdisk0 000cd60d520a23a9 rootvg hdisk1 000cd60d8a7b8d98 orclvg www.ixdba.net # 注:此为另一机器,举例。 记下要更换硬盘的SERIAL 把要更换硬盘从VG中拿掉 unmirrorvg datavg hdiskX去掉镜像 reducevg hdiskX datavg把要更换的硬盘从VG中拿掉 rmdev -l hdiskX –d在系统中把硬盘删掉 关机 shutdown –F 若有服务,如ORACLE,SYBAE等,先停服务。 准备工作 将防静电手链带上,另一端连金属物 拆机箱 把机器的外壳挡板拆下 更换硬盘 找到相应SERIAL的硬盘,在硬盘架上能看到,拨下。 将新硬盘换上 开机 查看硬盘 lspv 这时能看到新硬盘的SERIAL,hdiskX, 此处X可能为其它数字,因为系统可能将新硬盘认做其它PV,也可能是以前的PV 改PV 将hdiskX 改为以前ID,此处不会!也可能不用改。 做镜像 extendvg datavg hdiskX把diskX添加到datavg中, 大约需要10多秒 mirrorvg datavg 做镜像,可能会比较长的时间 把另一块盘18G拿掉 unmirrorvg hdiskX datavg reducevg hdiskX datavg rmdev –dl hdiskX 关机 更换硬盘 开机 查看硬盘信息 # lspv hdisk0 000cd60d520a23a9 rootvg hdisk1 000cd60d8a7b8d98 orclvg # 注:此为另一机器,举例。 记下要更换硬盘的SERIAL 改PV 将hdiskX 改为以前ID,此处不会!也可能不用改 做镜像 extendvg datavg hdiskX把diskX添加到datavg中, 大约需要10多秒 mirrorvg datavg 做镜像,可能会比较长的时间 起服务 oracle或SYBASE 英迈强人 网上文章 我从来都不写这些的。照顾你吧: 把把机器的前面板拆下 查看硬盘信息 # lspv 看哪个盘是干什么用的。 # lsdev -Ccdik,通过SCSI ID确定盘位(硬盘笼上标有) 把要更换硬盘从VG中拿掉 unmirrorvg datavg hdiskX去掉镜像 reducevg hdiskX datavg把要更换的硬盘从VG中拿掉 去掉HOTSPARE盘。 rmdev -dl hdiskX 在系统中把要卸掉的硬盘都删掉。 然后把卸掉的两块硬盘抽出,不需要关机,也不用什么防静电带,只要你别乱摸就行,它本来就是热插拔的。然后把两块36G硬盘插入空出来的硬盘槽。 运行 cfgmgr chvg -t 2 datavg chvg -t 2 rootvg lspv查看硬盘情况。 extendvg 6。migratepy hdiskX hdiskY,很安全的,尽管放心。 7。reducevg 8。rmdev -dl hdiskX 9。把18G硬盘拔掉,插入36G盘。 10。cfgmgr 11。lspv 12。extendvg, 13。mirrorvg 14。HOTSPARE(其实不如mirrorvg roootvg) 15。检查,OK。 2.9.2 第二方案 把把机器的前面板拆下 查看硬盘信息,看哪个盘是干什么用的 lspv # lspv hdisk0 000cd60d520a23a9 rootvg hdisk1 000cd60d8a7b8d98 orclvg 此处应该有HDISK2,HDISK3为DATAVG, # lsdev –Ccdiik,通过SCSI ID确定盘位(硬盘笼上标有) # lsdev -Ccdisk hdisk0 Available11-08-00-2,0 16 Bit LVD SCSI Disk Drive 这步有用吗? IXDBA.NET技术社区 hdisk1Available11-08-00-4,0 16 Bit LVD SCSIDisk Drive #     l 把要更换硬盘从VG中拿掉 unmirrorvg datavg hdiskX去掉镜像 reducevg hdiskX datavg把要更换的硬盘从VG中拿掉 rmdev -dl hdiskX 在系统中把要卸掉的硬盘都删掉 然后把卸掉的两块硬盘抽出一块,不需要关机,也不用什么防静电带,只要你别乱摸就行,它本来就是热插拔的。然后把两一块36G硬盘插入空出来的硬盘槽。 l 把硬盘做成PV 运行 cfgmgr l lspv查看硬盘情况 看新添加的硬盘被认作是哪个PV,即hdiskA-----36G第一块 l 把硬盘加到VG中 extendvg hdiskA datavg 1.   更改VG中的PP NUMBER chvg -t 2 datavg chvg -t 2 rootvg l 把18G硬盘数据复制到36G上, migratepy hdiskB(----为数据盘中未换下的18G硬盘) hdiskA,很安全的,尽管放心。 l 取下另一18G硬盘 reducevg hdiskC datavg rmdev -dl hdiskC 把18G硬盘拔掉,插入36G盘 l 把硬盘做成PV 运行 cfgmgr lspv查看硬盘情况 看新添加的硬盘被认作是哪个PV,即hdiskD 把硬盘加到VG中 extendvg hdiskD datavg l 做镜像 mirrorvg datavg hdiskA hdiskD hdiskA为先换上的36G硬盘,hdiskD为后换上的36G硬盘 l 检查,OK 2.10  AIX 常用命令汇总 在本文中,将讨论这其中的一些核心命令。其目的旨在为您提供一个可用作便捷参考的列表。虽然这些命令的行为在所有 AIX 版本中都应该相同,但是仅在 AIX 5.3 下对它们进行了测试。 注意: 以下段落中讨论的 bootinfo 不是用户级别的命令,并且在 AIX 4.2 或更高版本中不受支持。 命令 内核 如何知道自己在运行 32 位内核还是 64 位内核? 要显示内核启用的是 32 位还是 64 位,可输入以下命令: bootinfo -K 如何知道自己在运行单处理器还是多处理器内核? /unix 是指向已启动内核的符号链接。要了解正在运行什么内核模式,可输入 ls -l /unix 并查看 /unix 链接到什么文件。下面是 ls -l /unix 命令的三种可能输出及其对应的内核: /unix -> /usr/lib/boot/unix_up # 32 bit uniprocessor kernel /unix -> /usr/lib/boot/unix_mp # 32 bit multiprocessor kernel /unix -> /usr/lib/boot/unix_64 # 64 bit multiprocessor kernel 注意: AIX 5L Version 5.3 不支持单处理器内核。 如何从一种内核模式更改为另一种内核模式? 在安装过程期间,会缺省启用一种适合该 AIX 版本和操作中的硬件的内核。让我们使用前一个问题中的方法并假设启用了 32 位内核。我们还假设您希望在 64 位内核模式下启动。这可以通过按顺序执行以下命令来实现: ln -sf /usr/lib/boot/unix_64 /unix ln -sf /usr/lib/boot/unix_64 /usr/lib/boot/unix bosboot -ad /dev/hdiskxx shutdown -r /dev/hdiskxx 目录是启动逻辑卷 /dev/hd5 所在的位置。要弄清 hdiskxx 中有哪些 xx,可运行以下命令: lslv -m hd5 注意: 在 AIX 5.2 中,缺省安装的是 32 位内核。在 AIX 5.3 中,缺省情况下会在 64 位硬件上安装 64 位内核,在 32 位硬件上安装 32 位内核。 硬件 如何知道我的计算机是否能够运行 AIX 5L Version 5.3? AIX 5L Version 5.3 可在当前受支持的所有基于共用硬件参考平台(Common Hardware Reference Platform,CHRP)的 POWER 硬件上运行。 如何知道我的计算机是否基于 CHRP? IXDBA.NET技术社区 运行 prtconf 命令。如果是 CHRP 计算机,则字符串 chrp 会出现在 Model Architecture 行上。 如何知道我的 System p 计算机(硬件)是 32 位还是 64 位? 要显示硬件 32 位还是 64 位,可输入以下命令: bootinfo -y 我的计算机有多少实际内存? 要显示以 KB 为单位的实际内存,可输入以下命令之一: bootinfo -r lsattr -El sys0 -a realmem 我的计算机是否可以运行 64 位内核? 需要 64 位硬件才能运行 64 位内核。 我系统中的设备属性值是什么? 要列出磁带设备 rmt0 的当前属性值,可输入以下命令: lsattr -l rmt0 -E 要列出磁带设备 rmt0 的缺省属性值,可输入以下命令: lsattr -l rmt0 -D 要列出 TTY 设备 tty0 的可能登录属性值,可输入以下命令: lsattr -l tty0 -a login -R 要显示系统级别的属性,可输入以下命令: lsattr -E -l sys0 我的系统有多少个处理器? 要显示您系统上的处理器数量,可输入以下命令: lscfg | grep proc 我的系统上有多少个硬盘,当前正在使用哪些硬盘? 要显示系统上的硬盘数量,可输入以下命令: lspv 如何列出有关特定物理卷的信息? 举例来说,若要了解有关 hdisk1 的详细信息,可运行如下命令: lspv hdisk1 如何获得系统的详细配置? 输入以下命令: lscfg 下列选项可以提供特定的信息: -p 显示特定于平台的设备信息。该标志适用于 AIX 4.2.1 或更高版本。 -v 显示在自定义 VPD 对象类中找到的重要产品数据库(Vital Product Database,VPD)。 例如,要显示有关磁带驱动器 rmt0 的详细信息,可输入以下命令: lscfg -vl rmt0 通过运行 prtconf 命令也可以获得非常类似的信息。 如何确定芯片类型、系统名称、节点名称、型号,等等? uname 命令可以提供关于系统的详细信息。 uname -p 显示系统的芯片类型。例如,PowerPC。 uname -r 显示操作系统的版本号。 uname -s 显示系统名称。例如,AIX。 uname -n 显示节点名称。 uname -a 显示系统名称、节点名称、版本、计算机 ID。 uname -M 显示系统型号名称。例如,IBM, 9114-275。 uname -v 显示操作系统版本。 uname -m 显示运行系统的硬件的计算机 ID 编号。 uname -u 显示系统 ID 编号。 www.ixdba.net AIX 我的系统上在运行什么 AIX 主要版本、次要版本和维护级? 输入以下命令之一: oslevel -r lslpp -h bos.rte 如何确定某个特定的 AIX 级别缺少哪些文件集更新? 举例来说,若要确定 5300-04 缺少哪些文件集更新,可运行以下命令: oslevel -rl 5300-04 我的系统上安装了什么 SP (Service Pack)? 要了解系统上当前安装了哪个 SP,可运行 oslevel -s 命令。对于安装了 TL4 和 SP2 的 AIX 5L Version 5.3 系统,示例输出如下: oslevel –s 5300-04-02 我的系统上是否安装了 CSP (Concluding Service Pack)? 要确定系统上当前是否安装了某个 CSP,可运行 oslevel -s 命令。对于安装了 TL3 和 CSP 的 AIX 5L Version 5.3 系统,示例输出如下: oslevel –s 5300-03-CSP 如何创建文件系统? 以下命令将在卷组 testvg 中创建一个大小为 10MB、安装点为 /fs1 的 jfs 文件系统: crfs -v jfs -g testvg -a size=10M -m /fs1 以下命令将在卷组 testvg 中创建一个大小为 10MB、安装点为 /fs2 并具有只读权限的 jfs2 文件系统: crfs -v jfs2 -g testvg -a size=10M -p ro -m /fs2 如何更改文件系统的大小? 若要将 /usr 文件系统的大小增加 1000000 个 512 字节的块,可输入以下命令: chfs -a size=+1000000 /usr 注意: 在 AIX 5.3 中,JFS2 文件系统的大小还可以收缩。 如何安装 CD? 输入以下命令: mount -V cdrfs -o ro /dev/cd0 /cdrom 如何安装文件系统? 以下命令将在 /test 目录中安装文件系统 /dev/fslv02: mount /dev/fslv02 /test 如何安装所有缺省文件系统(/etc/filesystems 文件中标记有 mount=true 属性的所有标准文件系统)? 以下命令将安装所有此类文件系统: mount {-a|all} 如何卸载文件系统? 输入以下命令可以卸载 /test 文件系统: umount /test 如何显示已安装的文件系统? IXDBA.NET技术社区 输入以下命令可以显示有关所有当前已安装的文件系统的信息: mount 如何删除文件系统? 输入以下命令可以删除 /test 文件系统: rmfs /test 如何对文件系统进行碎片整理? 可以使用 defragfs 命令来改善或报告文件系统中的连续空间状态。例如,若要对文件系统 /home 进行碎片整理,可以使用以下命令: defragfs /home 哪个文件集包含某个特定的二进制文件? 若要显示 /usr/bin/vmstat 包含 bos.acct,可输入以下命令: lslpp -w /usr/bin/vmstat 或者若要显示 bos.perf.tools 包含 /usr/bin/svmon,可输入以下命令: which_fileset svmon 如何显示有关系统上已安装文件集的信息? 输入以下命令: lslpp -l 如何确定我的系统上是否安装了所有维护级文件集? 输入以下命令: instfix -i | grep ML 如何确定我的系统上是否安装了某个修复程序? 若要确定是否安装了 IY24043,可输入以下命令: instfix -ik IY24043 如何按 APAR 安装单独的修复程序? 举例来说,若要从 /dev/cd0 安装 APAR IY73748,可输入以下命令: instfix -k IY73748 -d /dev/cd0 如何验证文件集是否有必需的先决条件和是否已完全安装? 要显示需要安装或纠正哪些文件集,可输入以下命令: lppchk -v 如何获得符号表示中的 loader 节头和符号条目的转储? 输入以下命令: dump -Htv 如何确定已分配和使用的分页空间量? 输入以下命令: lsps -a 如何增加分页空间? 可以使用 chps -s 命令来动态增加分页空间的大小。例如,如果希望将 hd6 的大小增加 3 个逻辑分区,您可以执行以下命令: chps -s 3 hd6 如何减少分页空间? 可以使用 chps -d 命令来动态减少分页空间的大小。例如,如果希望将 hd6 的大小减少四个逻辑分区,您可以执行以下命令: chps -d 4 hd6 如何知道我的系统是否能够使用同步多线程(Simultaneous Multi-threading,SMT)? 如果您的系统是运行 AIX 5L Version 5.3 的基于 POWER5 的系统,则它就能使用 SMT。 如何知道我的系统是否启用了 SMT? 如果不带任何选项运行 smtctl 命令,它将告诉您是否启用了 SMT。 32 位内核是否支持 SMT? 是的,32 位和 64 位内核都支持 SMT。 如何启用或禁用 SMT? 可以通过运行 smtctl 命令来启用或禁用 SMT。下面是该命令的语法: smtctl [ -m off | on [ -w boot | now]] IXDBA.NET技术社区 可以使用以下选项: -m off 将 SMT 模式设置为禁用。 -m on 将 SMT 模式设置为启用。 -w boot 如果在下一次系统重新启动前运行 bosboot 命令,则此选项使 SMT 模式更改在下一次和后续重新启动时生效。 -w now 使 SMT 模式更改立即生效,但不会延续到下一次重新启动以后。 如果既没有指定 -w boot 也没有指定 -w now 选项,则模式更改立即生效。如果在下一次系统重新启动前运行 bosboot 命令,所做的更改将延续到后续重新启动以后。 如何获得特定于分区的信息和统计信息? lparstat 命令可以提供分区信息和利用率统计信息报告。此命令还可以显示 Hypervisor 信息。 卷组和逻辑卷 如何知道我的卷组是常规、大容量还是可扩展的? 对该卷组运行 lsvg 命令并查看 MAX PVs 的值。该值为 32 表示常规、128 表示大容量、1024 表示可扩展的卷组。 如何创建卷组? 可以使用以下命令,其中 s partition_size 设置每个物理分区中的兆字节 (MB) 数,并且 partition_size 是以 MB 为单位、从 1 到 1024 的值(对于 AIX 5.3 是从 1 到 131072)。partition_size 变量必须等于 2 的幂(例如:1、2、4、8)。标准和大容量卷组的缺省值是保持在“每个物理卷最多只能有 1016 个物理分区”限制内的最低值。可扩展卷组的缺省值为每个物理卷容纳 2040 个物理分区的最低值。 mkvg -y name_of_volume_group -s  partition_size   list_of_hard_disks 如何更改卷组的特征? 可以使用以下命令来更改卷组的特征: chvg 如何创建逻辑卷? 输入以下命令: mklv -y name_of_logical_volume   name_of_volume_group   number_of_partition 如何增加逻辑卷的大小? 举例来说,若要将 lv05 目录所表示的逻辑卷增加三个逻辑分区,可输入以下命令: extendlv lv05 3 如何显示属于某个卷组(例如,rootvg)的所有逻辑卷? 可以通过输入以下命令来显示属于 rootvg 的所有逻辑卷: lsvg -l rootvg 如何列出有关逻辑卷的信息? 可运行以下命令来显示有关逻辑卷 lv1 的信息: lslv lv1 如何删除逻辑卷? 可以运行以下命令来删除逻辑卷 lv7: rmlv lv7 rmlv 命令仅删除逻辑卷,但不删除其他实体,例如使用该逻辑卷的文件系统或分页空间。 如何镜像逻辑卷? 1. mklvcopy LogicalVolumeName Numberofcopies 2. syncvg VolumeGroupName 如何删除逻辑卷的副本? 可以使用 rmlvcopy 命令来删除逻辑卷的逻辑分区副本。若要减少属于逻辑卷 testlv 的每个逻辑分区的副本数量,可输入以下命令: rmlvcopy testlv 2 www.ixdba.net 现在该逻辑卷中每个逻辑分区最多只有两个物理分区。 有关卷组的问题 要显示系统中的卷组,可输入以下命令: lsvg 要显示 rootvg 的所有特征,可输入以下命令: lsvg rootvg 要显示 rootvg 所使用的磁盘,可输入以下命令: lsvg -p rootvg 如何将磁盘添加到卷组? 输入以下命令: extendvg VolumeGroupName hdisk0 hdisk1 ... hdiskn 如何确定我的硬盘所支持的最大逻辑磁道组 (LTG) 大小? 可以带 -M 标志使用 lquerypv 命令。此命令的输出给出以 KB 为单位的 LTG 大小。例如,在下面的示例中,hdisk0 的 LTG 大小为 256 KB。 /usr/sbin/lquerypv -M hdisk0 256 还可以在硬盘上运行 lspv 并查看 MAX REQUEST 的值。 syncvg 命令是做什么用的? syncvg 命令用于同步过时的物理分区。它接受逻辑卷、物理卷或卷组名称作为参数。 例如,若要同步位于物理卷 hdisk6 和 hdisk7 上的物理分区,可以使用以下命令: syncvg -p hdisk4 hdisk5 若要同步卷组 testvg 中的所有物理分区,可以使用以下命令: syncvg -v testvg 如何替换某个磁盘? 1. extendvg   VolumeGroupName hdisk_new · migratepv   hdisk_bad hdisk_new · reducevg -d   VolumeGroupName   hdisk_bad 如何克隆 rootvg(创建其副本)? 您可以运行 alt_disk_copy 命令来将当前 rootvg 复制到某个替代磁盘。下面的示例演示了如何将 rootvg 克隆到 hdisk1。 alt_disk_copy -d hdisk1 网络 如何显示或设置网络参数值? no 命令设置或显示网络优化参数的当前或下一次启动时的值。 如何获得我计算机的 IP 地址? 输入以下命令之一: ifconfig -a host Fully_Qualified_Host_Name 例如,输入主机 cyclop.austin.ibm.com。 如何确定服务器上的网络接口? 以下两个命令中的任何一个都将显示网络接口: lsdev -Cc if ifconfig -a 若要获得有关某个特定网络接口(例如,tr0)的信息,可以运行以下命令: ifconfig tr0 如何激活网络接口? 若要激活网络接口 tr0,可以运行以下命令: ifconfig tr0 up 如何禁用网络接口? 举例来说,若要禁用网络接口 tr0,可以运行以下命令: ifconfig tr0 down 3 常见问题篇 AIX是IBM公司开发的业界领先的优秀商务Unix操作系统,在可靠性、可用性、开放性、扩展性、高性能、安全性等方面都非常突出,尤其是在Internet的关键应用领域以及系统和硬件管理能力方面,其性能表现更为出色,受到了业界的普遍认可和广泛使用。以下是笔者几年来使用AIX系统的一点心得,兹供使用该系统的其他读者参考。 3.1 如何禁止终端上的中断键(CTRL+C)? 在很多应用系统中,系统管理员希望普通用户只运行自己的应用程序,不能进入系统的shell提示符下,但缺省情况下当用户在终端上按CTRL+C键时就会退到系统提示符下。由于用户终端一般没有固定的端口号,为了禁止使用中断键,可采取下面办法: (1)如果使用ksh, 可在$HOME/.profile中第一行加入如下内容: IXDBA.NET社区论坛 trap "echo 'Abnormal operation'; exit" 123915 (2)如果使用csh(ksh亦可),可用如下命令: %stty intr ^! 如果恢复正常情况,键入下列命令: % stty intr ^c 3.2 如何在shell中不回显(echo)字符? 在实际应用中,一般当我们在键盘上键入口令时不希望将其显示在屏幕上,为此可采用下面的两种办法: ·使用stty 命令 stty -echo # do not display password echo "Enter password: \c" read PASSWD #get the password stty echo # restore standard configuration ·使用echo命令 设置保密属性:echo "3[8m" 取消保密属性:echo "3[m" 3.3 如何在某个目录及其所属子目录的所有文件中查找字符串? 在程序维护过程中,有时需要在某个目录及其所属子目录的所有文件中查找某一个字符串,为此可用下面两种方法(假设在*.cp文件中查找字符串"abc",结果放在文件out中): (1)cat /dev/null > out find ./ -name "*.cp" -exec grep "abc"{} >> out (2)find ./ -name "*.cp" | xargs grep "abc" > out 推荐使用第二种方法,因其系统开销小、速度快。 3.4 如何对/etc/inittab文件中的一行进行注释? 我们都知道在shell中使用"#"作为注释符号,但在/etc/inittab中注释一行的方法是在第一个字符前插入字符":"。 3.5 如何转换DOS和AIX两种格式的文本文件? 如欲转换DOS和AIX两种格式的文本文件,有两种方法: (1)用ftp命令:设置ASCII传输类型,在一台运行AIX的机器和另外一台运行Windows的机器之间互相传送,这里不再赘述。 (2)使用AIX2dos或dos2AIX命令 如将DOS格式的文本文件转换为AIX格式,可用命令A:dos2AIX inputfile outfile,反之可用命令:AIX2dos inputfile outfile,关于dos2AIX和AIX2dos命令的详细用法可参阅"dos2AIX -h "和"AIX2dos -h "。注意要使用这两个命令,必须首先安装文件集bos.pci。 6.如何解决某一PV上的VGDA与ODM库不一致的问题? 在系统维护过程中,因为操作错误或其他特殊原因,有可能使某一PV上的LVCB和VGDA与其对应的ODM库不一致,导致ODM库紊乱,对PV的有关操作无法进行,这时可采用如下两个AIX命令加以解决: redefinevg -d hdisk_name vg_name 该命令以指定PV上的LVM信息重新定义给定VG的ODM库。 或:synclvodm -P -v vgname 该命令同步或重建给定VG的ODM库和LVM信息。 3.6 如何设置用户的文件大小限制? 在AIX系统中,用户使用系统资源是有一定限制的。如用户缺省可创建或扩展的最大文件为1G(参见/etc/security/limits: fsize = 2097151, fsize_hard=fsize 512-bytes blocks)。 如欲修改,可使用smit: # smit chuser 选择用户,修改下面两项: Soft FILE size [4194302] # (2G,可根据需要设定) Hard FILE size [4194302] # (2G, 可根据需要设定 ) 用该用户身份登录,使用"ulimit -f "和"ulimit -Hf"可分别显示其fsize、fsize_hard的大小。 3.7 如何按文件大小排序列出一个文件系统下的文件? 当监控某一文件系统的空间使用情况时,如果该文件系统剩余空间较少或已使用空间增长较快,则有必要排序列出该文件系统中所有大于某一给定字节数的文件,以便进一步维护管理。为此,可用如下命令: # find [filesystem_name] -xdev -size +[512-bytes bloks] -ls | sort -r -n -k7 3.8 AIX中查看用户对系统资源的使用情况 在AIX中可以通过打开acct功能来查看用户的资源使用情况,主要包括:用户连接情况、用户CPU使用情况、 磁盘使用情况和打印机使用情况等。具体的步骤(共7步)有: 1. 在/var/adm/acct目录下创建三个子目录:nite,sum,fiscal 2. 以root登录,到/var/adm目录下,执行/usr/lib/acct/nulladm wtmp pacct。 3. 通过在/etc/rc文件中添加两行(最后一行"exit 0"之上): echo "Starting Process Accounting" /usr/bin/su - adm -c /usr/lib/acct/startup 打开记帐功能。 4. 将/etc/filesystems中要加入磁盘记帐的文件系统相关节中的account值改成true 5. 修改/etc/qconfig文件,要加入打印机使用记帐的打印队列的描述节中添加一行,如: lp0: device=dlp0 acctfile = /var/adm/qacct # 添加行 6. 修改cron,例/var/spool/cron/crontabs/adm文件: 10 23 * * 0-6 /usr/lib/acct/runacct 2> /usr/adm/acct/nite/accterr > /dev/null 0 23 * * 0-6 /usr/lib/acct/dodisk > /dev/null 2>&1 0 * * * * /usr/lib/acct/ckpacct > /dev/null 2>&1 15 4 1 * * /usr/lib/acct/monacct > /dev/null 2>&1 7. 如果要使用adm用户进行记帐管理,首先要给它分配密码,然后在PATH环境变量中包括/usr/lib/acct以方便命令执行。 完成这些步骤后,系统会在步骤一生成的目录下定期生成报告文件,记录各用户的资源使用情况。 3.9 AIX环境如何找到活动最频繁的进程 1。下面命令输出中的'C'字段是一个进程的cpu-penalty值(0到120之间),值越大表明进程越活跃。 # ps alxw | sort +5 -n 2.显示前10个累计占用CPU时间的进程 #ps -e|head -n 1;ps -e|grep -v"TIME|0:"|sort +2b -3 -n -r|head -n 10 3。显示前10个当前占用CPU时间的进程 #ps -ef|head -n 1;ps -ef|grep -v"C|0:00"|sort +3b -4 -n -r|head -n 10 4。显示前10个占用CPU应用的进程 #ps gu|head -n 1;ps gu|grep -v"CPU|kproc"|sort +2b -3 -n -r|head -n 10 3.10 AIX如何管理Paging Space Paging Space 的大小应符合应用的需要.太大会浪费硬盘空间,太小会影响系统的运行.Paging Space的确定原则: 1. 系统实际内存小于64MB, paging space= 2 * RAM  2. 系统实际内存在 64MB to 256MB 之间, Page Space = RAM size + 16MB  3. 系统实际内存大于 256MB , Page Space = 512 + ( RAM - 256 ) * 1.25  4. 对于AIX 4.3.3 当内存达到4GB 到8GB,因为AIX 4.3.3 使用延迟的(deferred )paging space.Paging Space主要根据应用的要求来定. 一般可初始3GB, 然后观察paging space的使用情况,如果使用率超过70%, 则需要增加paging space.  以上计算方法只是粗略地算法,用户可根据实际情况调整.  * 如果系统出现以下几种情况,则说明需要扩大paging Space: 1. 下列任意错误信息之一: INIT: Paging space is low ksh: cannot fork no swap space Not enough memory Fork function failed fork () system call failed Unable to fork, too many processes Fork failure - not enough memory available Fork function not allowed. Not enough memory available. Cannot fork: Not enough space  2. 使用命令" lsps -a" ,其结果%USED 列的平均值大于80%.  3. 使用命令"lsps -s" 其结果%USED 列大于80%.  * 使用下列命令也可以检查paging space是否够用:       iostat       vmstat       lsps 3.11 如何检查AIX文件系统的病毒? 如何检查AIX文件系统的病毒? #virscan directory 例如: virscan /usr 3.12 如何查看操作系统中是否安装了某个补丁程序? 如何查看操作系统中是否安装了某个补丁程序? 使用命令: lslpp -Bl Uxxxxxx Uxxxxxx 是补丁程序的ID. 例: lslpp -Bl U465241 命令可用于查看系统中是否安装了ID为U4652241的补丁程序. 3.13 使用命令行安装删除文件包 在AIX 中, 一般使用"smit"命令来安装和删除文件包,但有时经常会遇到"smit"本身被破坏的情况, 我们可以使用"installp"命令来安装及删除文件包. 安装: installp -ac -Q -d /dev/cd0 删除: installp -u 3.14 AIX FAQ手册 1.AIX 是什么? AIX 是 IBM 公司推出的 UNIX 操作系统,它是 UNIX 的一种产品实现。它适用于一些硬件产品,最有名的就是 IBM p 系列主机。其它的一些生产商,如摩托罗拉,也有一些硬件产品可以支持 AIX。AIX 集合了 System V,BSD 和 OSF/1 等系统的一些特性,同时它也拥有很多自己特有的工具,尤其是在系统管理方面。AIX 的主要目的是提供一个优秀的、具有高扩展性,高稳定性和高可管理性的企业级操作系统平台。 2.什么是对象数据管理器(Object Data Manager)? AIX 系统用一种独特的方法来管理和维护系统的配置信息,设备信息和关键产品信息。所有这些信息都保存在/etc/objrepos, /usr/lib/objrepos 和/usr/share/lib/objrepos目录中,位于这些目录中的文件被称为系统对象类。 系统对象类是由对象数据理器来管理的。对象数据管理器简称 ODM,它是一组用于管理面向对象数据库的程序和命令。因此系统对象类也称为 ODM 数据。ODM 提供了一些类似 SQL 语法的命令,来存取系统对象类数据库。在 AIX 系统中,ODM 是一个采用面向对象的方法来管理系统数据的工具。在以前的 UNIX 环境中,所有的系统数据都是以 ASCII 码的方式的文本文件存放,与此相比,ODM 提供了一个功能更强大,更安全,可共享的方法来管理这些系统数据。 3.如何了解我目前 AIX 的具体版本信息? 当您安装好一个基本的操作系统以后,您可以使用 oslevel 命令来确定您的系统维护级别(ML,maintenance level)。 oslevel 的基本语法是: oslevel [ -l | -g | -q ] [ -r | -s ] [ -f ] 在下面的表中向您显示了一些常用的 oslevel 选项的描述 选项  描述  -l level  列出比 Level 参数指定的维护级别低的文件集(fileset)  -g level  列出比 Level 参数指定的维护级别高的文件集(fileset)  -q  列出维护级别的名称  -r  使用所有选项来查看推荐维护级别(Recommended Maintenance Levels)  -s  使用所有选项来查看补丁包(Service Packs)  -f  强制执行高速缓冲重建  如果什么参数都不使用的话,那么 oslevel 命令将列出维护级别和当前系统相同或者更高的系统基础软件。 您可以使用下面的命令来查看您系统当前的维护级别: # oslevel 4.3.2.0 在 AIX 中,使用产品的名称和基本号来定义了一个软件产品的版本信息。AIX 3.2 以及以后的版本,软件产品的版本信息定义为以下的格式: vv.rr.mmmm.ffff 其中: vv 是表示版本号的 2 位数字。 rr 是表示发行号的 2 位数字。 mmmm 是表示修改级别的 4 位数字。 ffff 是表示补丁级别(fix level)的 4 位数字。 例如,bos.net.tcp.client 4.3.2.0 是一个文件集(fileset),bos.net.tcp.client 4.3.2.1 是一个对于它的升级文件集。如果还有另一个升级文件集 bos.net.tcp.client 4.3.2.2 发布,那么这个最新的文件集将包括所有在 bos.net.tcp.client 4.3.2.1 中的内容。如果发布了一个累计的 AIX 升级包,那么版本信息就会被增加并变为 bos.net.tcp.client 4.3.3.0,它将包括以前所有的修改内容。 如果经过升级以后,您的系统维护级别并没有显示为新的级别,那么可以使用 oslevel -r 命令来确定哪些文件集并没有被升级。在图 1 中,系统已经是 4.3.0.0,但是有一些文件系统并没有被升级。 图 1 oslevel –l 输出示例   同时,oslevel 命令可以作为确认一个低版本的 AIX 升级到高版本是否成功的依据。例如,一个刚刚由 AIX 4.3.3 升级到 AIX 5.1 版本的系统,您可以通过使用下面的 oslevel 命令来进行确认: IXDBA.NET技术社区 # oslevel 5.1.0.0 # oslevel -l 5.1.0.0 # 4.AIX 中的各种软件类型 软件产品包括随 AIX 自带的软件和单独购买的部分。AIX 的软件可以分为以下几个种类: 文件集(Filesets) 文件集是 AIX 操作系统上最小的可安装单元。文件集包含着组成一个完整产品的所有文件,例如,bos.net.uucp。 软件包(Package) 文件包是一组为实现一组相关功能而组合在一起的文件集。例如,bos.net 就是一个软件包。 许可程序产品(Licensed Program Products,LPP) 许可程序产品(LPP)是指一个包含了所有和这个许可程序相关的软件包的完整软件产品。例如,BOS 就是一个许可程序产品。 软件集(Bundles) 软件集就是一组包含了文件集,软件包或许可程序产品的软件,它们组合在一起为了实现一个特定的功能,例如提供一个个人的信息管理系统或者是网络上的一个客户端程序。缺省情况下,系统使用的软件集存放在 /usr/sys/inst.data/sys_bundles 目录中。用户自定义的软件集会存放在 /usr/sys/inst.data/user_bundles 中。AIX 5L V5.1 中系统定义的软件集包括: App-Dev CDE GNOME KDE Media-Defined Netscape devices wsm_remote PTF 是程序临时补丁(Program Temporary Fix)的缩写。一个 PTF 是一个升级文件集或者一个用以修复前面版本出现的问题的文件集。PTF 安装的方法和文件集的安装方法一样,都是使用 installp 命令。 APAR 是授权程序分析报告(Authorized Program Analysis Report)的缩写,它是一种紧急的修复,或者是针对于唯一的系统问题而出的修复。最后,经过测试和确认 APARs 将会变成 PTF。APAR 使用 instfix 命令来安装到系统上。 相关资源: AIX 5L 系统的安装介绍:http://www.ibm.com/developerworks/cn/aix/library/au-cn-install5l/ 5.如何使用 installp 安装相应的软件? 当您安装完基础的操作系统后,只有比较基本的软件安装到您的系统上了。在后面的管理和使用中,还会安装很多特定功能的软件,您可以使用命令行或者 SMIT 工具来完成这些软件的安装。AIX 上的软件可以被安装为两种状态:应用状态(applied)和提交状态(committed)。应用状态下的软件或者更新,会把原有的旧版本的软件保留下来,缺省存放在 /usr/lpp/PackageName 目录下,PackageName 是软件包的名称。这样的情况比较适用于在软件的测试和评估阶段,如果新版本的软件有任何的异常,还可以恢复到原来的版本。而提交状态(committed)软件是指安装完毕后把原有的版本删除掉,这样也就无法恢复到原来的版本了。显然,我们推荐您使用应用状态进行安装,等确认没有任何异常的情况下再转换为确认状态。 installp 是用来安装和升级软件的命令行工具。它拥有很多的选项,当然一般情况下只有一些基本选项会经常被使用到,如: -a 应用一个或者多个软件的安装和升级。这是缺省的操作。 -v 确认安装完成后会返回一个正确的 checksum 值。可以和 -a 和 -ac 一起使用来确认安装的成功与否。 -s 命令可用来得到一个应用的更新的列表,该更新可被提交或拒绝。 -c 标志提交更新时,用户对软件产品的版本做一个提交,并且从系统中删除来自于该软件产品所有先前版本的保存文件,从而使返回该软件产品的先前版本变得不可能。 -t 标志为保存目录指定一个备用位置,该目录保留了由更新替换的文件。 -A 命令可用来获得“授权程序分析报告”(APAR)号的列表和在指定软件包中已修复的所有用户报告的问题总结。 -i 命令可用来显示包含在指定软件包一部分的文件中的补充信息。 -l 列出在指定安装介质上的所有软件产品和更新 下面来举几个例子说明一下: 1.安装 TCP/IP 和它的一个包含在 /usr/sys/inst.images 目录下的更新 IXDBA.NET社区论坛 #installp -a -d/usr/sys/inst.images bos.net.tcp.client 4.1.0.0 bos.net.tcp.client 4.1.0.2 Installp Summary ---------------- Name Level Part Event Result -------------------------------------------------------------------- bos.net.tcp.client 4.1.0.0 USR APPLY SUCCESS bos.net.tcp.client 4.1.0.0 ROOT APPLY SUCCESS bos.net.tcp.client 4.1.0.2 USR APPLY SUCCESS 在同一个包中有重复的文件集时,installp 将使用它在安装内容表(.toc )第一个发现的那个。当 bffcreate 用于从不同介质用来释放映像到同一个安装目录中时,这个情况可能发生。因此,确保更新映像不被作为相同级别上的相同文件集的基本级别映像解压缩到相同目录。 2.列出所有包含在安装盒带上的软件产品和可安装的选项 installp -L -d /dev/rmt0.1 3.要在 bos.net 软件包(位于 /usr/sys/inst.images 目录)内安装(自动提交)所有文件集,并在需要时扩展文件系统 installp -aX -d/usr/sys/inst.images bos.net 4.要删除名为 bos.net.tcp.server 的文件集: installp -u bos.net.tcp.server 5.要用 installp 命令预览(不实际安装)“应用程序开发者”包的安装: installp -pacgXd /dev/rmt0.1 -f /usr/sys/inst.data/sys_bundles /App_Dev.bnd SMIT 其实也是使用 installp 来进行安装的,只是更加形象化,同时更加地便于操作,在这里就不进行过多的叙述了。 相关资源: AIX 常用命令汇总:http://www.ibm.com/developerworks/cn/aix/library/au-dutta_cmds.html 6.如何查看服务器的硬件信息? 如果想了解您系统的硬件信息,您可以使用以下的这些命令: lsdev: 显示系统上安装的设备以及它们的特性信息。 lspv: 显示卷组中的物理卷的信息。 lsattr:显示指定的设备的信息。 下面分别向您介绍这三个工具: 您可以使用 lsdev 命令来显示在设备配置库(device configuration database)中的设备信息。您还可以分别使用 -C 和 -P 选项来显示 ODM(Object Database Manager,对象数据管理器)中的自定义设备(Customized Devices object )类和预定义设备(Predefined Devices object)类的信息。 表中为您列举了一些 lsdev 常用选项的介绍: 选项  描述  -C  列出属于自定义设备类设备的信息。缺省是显示设备的名称,状体,位置和描述信息。这个选项不能和 -P 一起使用。  -c Class  使用指定的设备名称进行显示。这个选项可以实现对特定的类进行特定的输出。  -h  显示使用说明信息。  -P  列出属于预定义设备类设备的信息。缺省是显示设备的类,类型,子类和描述信息。这个选项不能和 -C,-l 和 -S 一起使用。  -S State  列出处于特定状态的所有设备。  如果想列出处于可用状态并在自定义设备类中的适配器,可以输入: lsdev -C -c adapter -S a lsdev 的命令输出包括一些基本的设备信息,然而,您可以通过 lspv 命令来得到一些更加详细的关于物理卷的信息。 如果您不加任何选项使用 lspv,那么它将输出所以物理卷的信息,包括:名称,物理卷标识符和这个物理卷属于那个卷组。如果您提供了特定的物理卷作为选项的话,那么它将只输出这个物理卷的信息。lspv 命令的基本语法如下: lspv [ -l | -p | -M ] [ -n DescriptorPhysicalVolume] [-vVolumeGroupID] PhysicalVolume 两个最常用的是: -p 显示物理卷中每一个物理分区的范围,状态,区域,LV(logical Volume,逻辑卷)的名称以及挂载点。 IXDBA.NET社区论坛 -v VolumeGroupID 将显示根据提供的 VolumeGroupID 参数而确定的访问信息。 例如: 想显示您系统上的物理卷,可以输入: lspv hdisk0 00615147ce54a7ee rootvg hdisk1 00615147a877976a rootvg 想显示物理卷 hdisk0 的状态和信息,可以通过下面的命令得到: lspv hdisk0 在配置完系统上的所有设备后,您可以使用 lsattr 命令来查看所有设备的属性信息。 如果您不指定设备的逻辑名称(-l Name),那么您必须使用由 -c Class,-s Subclass 和 -t Type 这些选项唯一定义的一个预定义设备作为参数。lsattr 命令的基本语法如下 表 3 lsattr 命令: 选项  描述  -D  为一个没有使用 -O 选型的指定设备显示属性名称,缺省值,描述以及用户定义选项值等信息。如果和 —O 选项一起使用,将只显示属性的名称和缺省值。  -E  为一个没有使用 -O 选型的指定设备显示属性名称,当前值,描述以及用户定义选项值等信息。如果和 —O 选项一起使用,将只显示属性的名称和当前值。这个选项不能和 -c,-D,-F,-s 和 -t 一起使用。  -F Format  使用用户定义的格式进行输出。  -a Attribute  输出设备的特定属性信息。  -c class  指定了设备的类名。不能和 -E 和 -l 选项一起使用。  -f File  从 File 文件中读取所需的选项。  -O  显示的时候把属性名用冒号分隔开,同时在第二行显示相应的值时候也用冒号隔开。  -R  显示属性的合法值。它以垂直的形式显示属性的值,如: Value1 Value2 . . ValueN  -t Type  指定一个设备的类型。这个选项可以限制对特性类设备的输出。它不能和 -E 和 —l 一起使用。  如果想显示当前磁带机设备 rmt0 的属性值,可以使用以下的 lsattr 命令: # lsattr -l rmt0 -E mode yes Use DEVICE BUFFERS during writes True block_size 1024 BLOCK size (0=variable length) True extfm no Use EXTENDED file marks True ret_error no RETURN error on tape change or reset True 如果想显示磁带机设备 rmt0 的缺省属性值,可以使用以下的 lsattr 命令: # lsattr -l rmt0 -D mode yes Use DEVICE BUFFERS during writes True block_size 1024 BLOCK size (0=variable length) True extfm no Use EXTENDED file marks True ret_error no RETURN error on tape change or reset True 如果想显示 SCSI 设备 scsi0 的 bus_intr_lvl 属性的当前值,可以使用以下的 lsattr 命令: # lsattr -l scsi0 -a bus_intr_lvl -E bus_intr_lvl 14 Bus interrupt level False 如果想显示 TTY 设备 tty0 的 login 属性的所有可能值,可以使用以下的 lsattr 命令: # lsattr -l tty0 -a login -R enable disable share delay hold 如果想显示串口设备 tty0 当前连接速度属性的值,可以使用以下的 lsattr 命令: # lsattr -El tty0 -a speed speed 9600 BAUD rate True 当然,根据配置的不同,您可能在看到的结果和上面的显示不相同。 7.如何查看 AIX 的系统参数? 结合第 5 部分中所描述的一些相关内容,在下面向您列出了一些常用的查看 AIX 系统参数的命令: lsdev -C 显示系统设备信息 lspv 查看系统物理卷信息 lsvg 查看卷组信息 lslpp 查看许可文件产品信息,主要用于查看已安装软件的信息 lsattr 查看设备参数信息 lscfg 查看 VPD(Virtual Producgt Data)信息 www.ixdba.net 当然,对于这些命令的具体使用还需参考 AIX 的具体使用手册。您同时可以使用 SMIT 工具来查看相关的系统参数信息。 8.如何在 32 位和 64 内核之间切换? 首先,使用下面的命令来确定您的硬件系统是否支持 64 位内核: # /usr/sbin/prtconf -c 它会返回“32”或者“64”,当然,显示“64”就意味着您的硬件系统为64位。如果您的系统不能执行 prtconf 命令,那么还可以使用 bootinfo -y 命令来进行确认。 当然,只有 64 位的硬件才能支持 64 位的内核。 下面分向您介绍如何在 32 位内核和 64 位内核之间进行切换 I.32 位内核向 64 位内核切换: 1. ln -sf /usr/lib/boot/unix_64 /unix 2. ln -sf /usr/lib/boot/unix_64 /usr/lib/boot/unix 3. bosboot -ad /dev/ipldevice 4. shutdown -Fr 5. 重启后,使用命令 bootinfo -K 查看,如果显示为 64,那么说明已经切换为 64 位内核了。 II.64 位内核向 32 位内核切换: 1. ln -sf /usr/lib/boot/unix_mp /unix 2. ln -sf /usr/lib/boot/unix_mp /usr/lib/boot/unix 3. bosboot -ad /dev/ipldevice 4. shutdown -Fr 5.重启后,使用命令 bootinfo -K 查看,如果显示为 32,那么说明已经切换为 32 位内核了。 9.如何挂载文件系统? mount 命令是 AIX 系统最常用的一个文件管理工具。只有使用了 mount 命令才能让诸如文件系统,文件,目录,设备等可用。这也是唯一的一种可以访问文件系统的方法。当然,对于不同的目标,mount 会配合使用不同的选项来实现他们的可访问性。 下面,我们通过一些例子来说明如何使用 mount 命令: 1.显示系统已挂载的文件系统: #mount node mounted mounted vfs date options over ---- ------- --------- --- ------------ ------- --------- /dev/hd0 / jfs Dec 17 08:04 rw, log =/dev/hd8 /dev/hd3 /tmp jfs Dec 17 08:04 rw, log =/dev/hd8 /dev/hd1 /home jfs Dec 17 08:06 rw, log =/dev/hd8 /dev/hd2 /usr jfs Dec 17 08:06 rw, log =/dev/hd8 sue /home/local/src /usr/code nfs Dec 17 08:06 ro, log =/dev/hd8 不加任何选项的 mount 命令会为您列出当前系统已经挂载的所有文件系统。 2.挂载所有的缺省文件系统: #mount all 这个命令会挂载所有在 /etc/filesystems 文件中被设置为 mount=true 的文件系统。 3.安装文件系统 mount /dev/fslv02 /test 将文件系统 /dev/fslv02 挂载到 /test 目录中。 4.安装 CD/DVD mount -V cdrfs -o ro /dev/cd0 /cdrom 将CD/DVD 设备挂载到 /cdrom 目录中。 5.挂接 NFS 文件系统 首先,保证 NFS 服务运行正常,可以使用 showmount -e hostname/ip 来查看相应主机或者 IP 地址上的 NFS 信息,如: # showmount -e nfsserver 如果能够显示相应的文件系统信息,说明 NFS 服务正常。 然后执行 mount 命令挂载相应的 NFS 文件系统到本地,如: mount nsfserver:/nfs/test /test 这样就相应的把 NFS 服务器(nfsserver)上的目录(/nfs/test)挂载到了本地(/test)。 10.如何启动和停止系统服务? 在 AIX 上,服务也可以称为子系统(Subsystem),它是受控于系统资源控制器(System Resource Controller,SRC)的。SRC 提供了一套命令来控制整个 AIX 系统的子系统,所以,启动和停止相关的服务(子系统)也是要通过这些命令来实现的。 1.启动子系统: startsrc 负责启动 AIX 上的子系统,一般的用法为: startsrc -s inetd 启动 Internet 服务 startsrc -t ftp 启动 ftp 服务(由于 ftp 服务是属于 inetd 子系统,所以启动 ftp 需要使用 -t 选项。) IXDBA.NET社区论坛 startsrc -g tcpip 启动全部的 tcpip 子系统 2.停止子系统: stopsrc -h zork -s srctest -f 强制停止主机 zork 上的 secret 子系统。 stopsrc -a 停止本机的所有子系统 3.刷新子系统 refresh -g tcpip 刷新子系统,以应用相应的配置修改。 4.查看系统上的所有子系统 lssrc -a 列出本机的所有子系统(无论运行还是没有运行) lssrc -g tcpip 列出所有属于 tcpip 组中的子系统 3.15 怎么样在Aix 5L上安装并启动X windows 这个X windows主要可能是Oracle 安装的时候会用到,Aix默认的X win是CDE。 X win的正常运行,起码需要如下文件 #lslpp -l X11.apps.rte X11.apps.xterm X11.base.rte X11.motif.lib X11.motif.mwm Fileset Level State Description ---------------------------------------------------------------------------- Path: /usr/lib/objrepos X11.apps.rte 5.2.0.30 COMMITTED AIXwindows Runtime Configuration Applications X11.apps.xterm 5.2.0.0 COMMITTED AIXwindows xterm Application X11.base.rte 5.2.0.50 COMMITTED AIXwindows Runtime Environment X11.motif.lib 5.2.0.60 COMMITTED AIXwindows Motif Libraries X11.motif.mwm 5.2.0.40 COMMITTED AIXwindows Motif Window Manager Path: /etc/objrepos X11.base.rte 5.2.0.50 COMMITTED AIXwindows Runtime Environment 如果以上包不够或者没有,可以采用如下方法安装CDE X win,首先插入第一张安装光盘到光驱,然后运行: #smit install_bundle 安装路径选择/dev/cd0 INPUT device / directory for software [/dev/cd0] 安装选项选择CDE,如 # Bundle (Locations) AllDevicesKernels Alt_Disk_Install App-Dev CC_EVAL.DocServices CC_EVAL.Graphics CDE DocServices GNOME 最后选择安装设置,如。 * INPUT device / directory for software /dev/cd0 * BUNDLE CDE * SOFTWARE to install [all] …… ACCEPT new license agreements? yes 回车执行,安装提示插入其它光盘,直到最后安装执行完成。如果X win安装成功,可以用如下命令来启动X win: #/etc/rc.dt 3.16 AIX下怎样根据端口号查找对应的进程 近日诊断AIX系统,发现一无名端口,然后跟踪端口查找到了非法的进程,基本操作如下,记录一下,以备查用!   1:首先根据端口号   netstat -Aan | grep 389   返回 f1000089c27a2358 tcp4 0 0 *.389 *.* LIST EN   2:rmsock f100089c27a2358 tcpcb   The socket 0x702f6800 is being held by proccess 4986 (inetd).   得到id为4986 IXDBA.NET技术社区   3:ps -ef |grep 4986   即可看到是什么进程。   两外可以找个软件:lsof,可以在http://aixpdslib.seas.ucla.edu/packages/lsof.html下载。   然后lsof -i:8001即可查看此端口的进程。 4 AIX的系统备份和恢复 备份和恢复是系统管理员经常要做的事情, 主要包括rootvg备份和用户数据备份.   1. 操作系统和系统程序的备份:   将一盘新磁带或无用磁带插入磁带机   #tctl -f /dev/rmt0 rewind   #smit mksysb      在"备份设备或文件"中添入"/dev/rmt0"后回车.   系统会运行很长时间, 等到屏幕显示OK后拿出磁带. 这时候, 系统备份完成. 注意: IXDBA.NET技术社区 mksysb仅备份rootvg中已安装的文件系统.   2. 用户数据备份   · 常用磁带机选项   /dev/rmt0: 若选择/dev/rmt0, 在插入磁带和写完一次磁带时, 磁带机都将磁带反绕到头. 因此, 下一次备份文件将覆盖本次备份.   /dev/rmt0.1: 若选择/dev/rmt0.1, 则插入磁带和写完一次磁带时, 磁带机均不反绕磁带. 因此, 一盘磁带可以连续备份几个文件或文件系统.   · #smit fs   选择"备份文件系统"   添入要备份的"文件系统名称"   添入"/dev/rmt0.1"      重复上述操作即可在同一盘磁带上备份多个文件系统.   3. rootvg的恢复   · 启动机器进入维护模式   参见安装手册, 当出现"Welcome to Base Operating System Installation and Maintanence"时, 选3 "Start Maintenance Mode for System Recovery"      · 恢复系统   继续选4 "Install from a System Backup"   出现"Choose mksysb Device"画面, 选"/dev/rmt0"并插入磁带后回车.这时候, 系统自动恢复操作系统.   4. 用户数据恢复   #tctl -f /dev/rmt0 rewind   #smit fs   选择"恢复文件系统"   添入"设备名称"和"目标目录"      系统会自动找到相应目录恢复. 5 AIX调试工具的介绍与使用详解 1、fdpr fdpr命令改进用户级程序和库的执行时间和对实际内存的使用。fdr命令可以通过不同的操作,如删除不必要的指令和重组代码和数据,而实现这样的目标。fdr命令安装在目录/usr/bin下。 fdpr命令在三个不同阶段上,对原有的执行代码应用先进的优化技术从而为其构筑一个优化的可执行代码。这三个阶段分别是: · 在阶段1,fdpr创建一个增加了某些装置(instrumented)的可执行程序。原有的可执行程序被保存为__ProgramFile.save,而新版本被命名为__ProgramFile.instr。 IXDBA.NET社区论坛 · 在阶段2,fdpr运行该增加了某些装置的可执行程序,并收集摘要(profiling)数据。该摘要数据被保存在一个叫__ProgramFile.prof的文件中。运行执行程序时需要为它提供典型的输入数据,以使fdpr命令能够找出代码中可优化的部分。 · 在阶段3,fdpr命令使用阶段2中收集到的重要信息对可执行代码重新排序。这些重新排序涉及到这样一些任务: (1)将那些高频度执行代码序列包装在一起。 (2)对条件分之重新排序,以改进硬件对分之条件的预测。 (3)将较少使用的代码部分移出来。 (4)内嵌一些热门函数。 (5)从重排序后的代码中删除掉NOP(空操作)指令。 另外,编译器中还提供了一个-qfdpr标志,用它可使编译器在执行代码中增加一些额外的信息,以辅助fdpr对该执行代码重新排序。但是,如果使用这个-qfdpr标志,则fdpr也只对那些用-qfdpr标志编译的模块重新排序。 2、schedtune schedtune命令可以给抖动、进程挂起、时间片以及线程在锁上所能轮询的时间长度等设置准则。 用schedtune,可调整AIX中所设立的一组影响其内存负载控制机制的参数。Schedtune命令用于显示和修改那些用于检测系统内存是否在过度使用以致造成抖动的参数。Schedtune命令还能用于修改运行在系统上的进程的惩罚和衰减因子。在root用户下,用schedtune命令可做下面的事情: · 决定用于确定抖动的准则。 · 决定哪个准则用于挂起进程。 · 决定在抖动终止后要等待多长时间才重新激活那些先前被挂起的进程。 · 决定被挂起的进程的最小数目。 · 调制调度优先级公式。 · 更改时间片数值。 · 决定在一把锁上轮询多长时间。 · 将schedtune值复位到它的缺省值。 需要注意的是,所有用schedtune作的修改在系统重启后都将丢失。为了确保所需的schedtune值在引导时能够置上,可在/etc/inittab文件中插入适当的schedtune命令。如:schedt:2:once:/usr/samples/kernel/schedtune -s 65536 3、vmtune vmtune命令负责显示和调整虚存管理器(VMM)和其它AIX部件使用的参数。系统中的根用户可动态修改包括下面这些参数: · VMM页替换 · 永久文件读写 · 文件系统缓冲区结构(bufstructs) · LVM缓冲区 · 裸输入/输出 · 换页空间参数 · 页删除 · 内存固定参数

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档