Chinaunix首页 | 论坛 | 博客
  • 博客访问: 184325
  • 博文数量: 36
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 445
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-26 10:26
文章分类

全部博文(36)

文章存档

2010年(3)

2009年(18)

2008年(15)

我的朋友

分类:

2009-08-14 00:56:05

作为一名 UNIX 管理员,您可能对分页和交换的一些概念已经非常熟悉。AIX 提供了三种不同模式的分页空间分配策略:延迟的页面空间分配(deferred page space allocation)、晚页面空间分配(late page space allocation)、早页面空间分配(early page space allocation)。AIX 的缺省策略是延迟的页面空间分配。这样可以确保将分页空间的分配延迟到必须调出页面的时候进行,从而确保不会浪费分页空间。事实上,当您拥有很大的 RAM 时,您甚至不需要使用任何分页空间(请参见)。



                
# lsps -a

Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type
hd6             hdisk0            rootvg        4096MB     1     yes   yes lv   

中仅使用了百分之一的分页空间。

让我们来看看 AIX 是如何处理分页空间分配的(请参见)。



                
# vmo -a | grep def
  defps = 1

说明使用了这种缺省的方法(延迟的页面空间分配)。要禁用这个策略,您需要将参数设置为 0。这将使得系统使用晚分页空间分配策略。晚分页空间分配策略会在 RAM 中相应的页面被修改时才分配分页磁盘块。这种方法通常用于那些性能比可靠性更加重要的环境。在本文所介绍的场景中,程序可能会因为缺少内存而运行失败。那么早页面空间分配又如何呢?如果您希望确保进程不会因为较低的分页情况而终止,通常可以使用这种策略。早页面空间分配策略可以预先分配分页空间。这是与晚分页空间分配策略截然相反的。对于可靠性要求很高的环境,可以使用这种策略。启用这种策略的方法是将 PSALLOC 环境变量设置为 early (PSALLOC=early)。

您还应该了解在 AIX Version 5.3 中首次引入的垃圾回收特性。这个特性允许您释放分页空间磁盘块,从而允许您配置比通常所需要的更少的分页空间。这种特性只能用于缺省的延迟页面空间分配策略。

在这个部分中,我将向您介绍如何监视系统中的分页空间。我还将介绍用于配置分页空间的各种命令,以及帮助系统管理员使用分页空间的其他工具。

要确定系统中分页空间的使用量,最简单的方法是运行 lsps 命令(请参见)。



                
# lsps -s
Total Paging Space   Percent Used
      4096MB               1%

您已经在前面看到了 -a 标志。我喜欢使用 -s 标志,因为 -a 标志仅仅显示所使用的分页空间,而 -s 标志则可以提供所有分配的分页空间的汇总信息,包括使用早页面空间分配策略分配的空间。当然,这个标志仅适用于禁用了分页分配缺省方法的情况。

接下来再研究 vmstat。本系列文章的非常详细地介绍了 vmstat,这是我最喜欢的 VMM 监视工具之一。我发现,要确定系统的运行情况,使用这个命令是最简单的方法。您可以从中发现是否存在许多分页以及是否发生了颠簸。

让我们来看看 中显示的一些输出。



                
# 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——这一列表示调出到分页空间的页面数。

正如您在 中所看到的,该系统中几乎没有进行分页。

显示了一个可能出现了颠簸的系统的示例。



                
# 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 来查看内存的使用情况。这两种实用工具可以以图形的方式、更加友好的格式显示分页信息(请参见)。



                
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 列(如 中以粗体显示的内容)显示根本不存在分页。

那么如何维护分页空间的大小呢?在 AIX 中,您可以使用 swap 命令(请参见 )来完成这项任务。



                
# swap -l
device              maj,min     total       free
/dev/hd6            10,  2      4096MB      4093MB

其结果说明,系统中定义了一个交换分区。您还将注意到,其中只使用了 3MB 的空间。 显示了当分页空间利用率过高时会发生什么样的情况。



                
# lsps -a

Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type
hd6             hdisk0            rootvg        4096MB    78    yes   yes   lv   

在这个示例中,您的分页空间变得很低,以至于可能出现危险。您的系统从启动到现在可能已经很长时间了。如果您运行数据库(如 Oracle),那么直到您清空数据库缓存,才会释放虚拟内存。让我们来查看一下您的系统启动了多长时间了(请参见)。



                
# uptime
  11:58AM   up 9 days,  15:50,  23 users,  load average: 0.00, 0.03, 0.04

如 中所示,这个系统才启动了 9 天。如果在这么短的时间内,分页空间利用率就增加到百分之七十八,那么您应该考虑添加更多的分页空间。如果您的系统中还有足够的空间,可以添加另一个分区。

一个最佳实践是,请记住保持分页空间的大小相同。在这个示例中,我会添加另一个 4GB 的分页空间到 rootvg 卷。您可以使用系统管理工具 (SMIT) 来完成这项任务,并使用 smit mkpssmit swapon 命令以激活分页空间。或者,您可以从命令行使用 swapon(包括 swapoff)命令。如果可以,请使用最少被分页区域所使用的磁盘。另外,可以尝试不要为每个物理磁盘分配多个分页逻辑卷。尽管有些管理员并不介意将分页空间放到外部存储中,但是我个人并不推崇这种做法。如果您采取了这种方式,并且外部存储直到重新启动之后才可用,那么您的系统可能会出现崩溃(这取决于所分配的分页空间的大小)。如果可以,请将它们分散到多个磁盘,并且使用 lsps -a 命令确保它们是联机的。

您的系统究竟需要多大的分页空间呢?其基本原则是什么呢?首先,从提供应用程序的组织开始。DB2® 或者 Oracle 团队应该可以告诉您,从数据库的角度来看,系统究竟需要分配多大的分页空间。如果是一家小型的公司,您就不得不自己研究确定。请多加小心。数据库管理员通常会提出最大的需求,并且告诉您将分页空间的大小设置为您的 RAM 的两倍(以前的基本原则)。通常来说,如果我的系统拥有超过 4GB 的内存,我会按照 RAM 的大小来创建分页空间。在投入运行后,要经常监视您的系统。如果您看到分页空间的利用率从来都没有接近过百分之五十,那么就不需要添加额外的空间。您可以查看最近 Oracle 为 AIX 提供的文档(请参见部分),以证实这个基本原则。其中说明了,分页空间的推荐初始设置为 RAM 大小的一半加上 4GB,但是上限为 32GB。它推荐使用 lsps -a 命令监视系统中空间使用率超过百分之二十五的情况。添加根本不会用到的额外空间,是毫无意义的。

经常有人问我,如何判断某个进程是否正在使用分页空间?可以查看一下 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 来优化分页参数,这可以极大地降低系统中的分页次数。我还介绍了一些需要更改的阈值和参数,它们会影响您的整体扫描开销。

您可以对 VMM 进行哪些优化工作来减少分页呢?在本系列的第一期文章中(请参见部分),我曾详细地介绍了 minpermmaxperm 参数,在本文中,我将对一些最重要的概念进行总结。在优化 vmo 设置的过程中,可以偏重于工作存储或者持久存储。通常,您希望偏重于工作存储。防止 AIX 调出工作存储并充分利用数据库缓存的方法是,将 maxperm 设置为一个较高的值(大于 80),并确保 lru_file_repage=0 参数表示是否应该考虑 VMM 重分页计数,以及它应该替换何种类型的内存。其缺省设置为 1,所以您需要将其更改为 0。可以使用 vmo 命令来完成这项工作。当您将该参数设置为 0 时,它会告诉 VMM,您希望仅替换文件页面,而不是计算页面。这正是您所希望的。您还需要设置 minpermmaxpermmaxclient 参数,如下面的 所示。



                
vmo -p -o minperm%=5
vmo -p -o maxperm%=90
vmo -p -o maxclient%=90

在以前的 AIX 版本中,您可以对 strict_maxpermstrict_maxclient 的缺省值进行优化。在 AIX Version 5.3 中,更改 lru_file_repage 参数是一种更加有效的优化方法,因为您希望不要使用 AIX 文件缓存。现在,让我们简要地总结一下 minfreemaxfree。如果空闲列表中的页面数低于 minfree 参数,VMM 开始替换页面,直到空闲列表至少包含 maxfree 参数中指定的页面数。AIX Version 5.3 中的缺省设置通常可以正常工作(请参见)。



                
# vmo -a | grep free
              maxfree = 1088
              minfree = 960

让我们来介绍一些优化页面空间的阈值。如前所述,当您的分页空间开始变得很低时,系统将会警告破坏性的进程,然后终止它们。更改哪些阈值可以影响这项活动呢?这些阈值分别是 npswarenpskillnokilluidNpswarn 是当空间变得较低时用于通知进程的阈值。Npskill 是 AIX 开始终止进程的阈值。如果您的策略是早页面空间分配策略,它将不会终止进程。如果您还记得,我曾提到过,这是最可靠的分页方法。Nokillid 是一个非常重要的阈值,因为如果它设置为 1,那么它将确保不会终止 root 所拥有的进程,即使达到了 npskill 阈值。

而且,当因为分页空间的问题使得进程不能通过 fork 系统调用来创建子进程时,调度程序将重新尝试为其创建子进程,共重试五次,每次重试之间延迟十个时钟周期。您可以更改 schedo 参数以增加或者减少尝试的次数。用于这项任务的参数是 pacefork 值。您可以查看的另一个重要参数是 lrubucket。对这个参数进行优化,可以降低扫描开销。在对拥有大量内存的系统进行扫描时,因为页面置换算法始终查找空闲帧,所以需要扫描的页帧的数目是非常重要的。增加这个值可以减少需要扫描的桶数。这样做可以帮助提高性能。 使用了带 -a 选项的 vmo 命令,以显示 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 系统中的分页。

本系列文章的第 3 部分介绍了一些用于捕获数据进行交换分析的工具。您使用了一些系统管理命令来显示和配置系统中的交换参数,并且了解了有关分页和交换的概念、以及 AIX 中可用于分页的各种方法。您还看到了一些对系统的分页空间进行配置的最佳实践。最后,您学习了优化 VMM 以处理分页和交换的特定方法。本系列文章的和详细地介绍了 VMM 以及如何对内存瓶颈进行故障诊断。您使用了各种工具帮助监视系统,以便进行短期和长期的分析。您还了解了通用优化方法的所有内容,以及在出现瓶颈前对系统进行监视的重要性。这使得您能够在系统正常运行时建立基准数据,以便可以使用本系列文章中所介绍的方法,包括优化您的内存子系统。请确保在将更改部署到生产环境之前,在开发或测试环境中对它们进行测试。

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