关于AIX上VMO调整参数的若干说明

最近,关于AIX机器上虚拟内存参数调整的问题出现了好几次,也调过好几台机器的参数,现结合网上的文档,

把这部分知识理一理,做一下记录。

1.在AIX系统中,内存可以简单的分为两类,计算型内存和文件型内存,
在AIX操作系统中,可以使用topas命令查看整个系统的运行情况,其中一个重要的部份是系统的内存使用情况,

以及交换情况:

MEMORY
Real,MB   16032
% Comp     83.2
% Noncomp   9.9
% Client    9.9

PAGING SPACE
Size,MB   16384
% Used      3.3
% Free     96.6

在一个使用裸设备的系统中,文件型内存,即上面的%Noncomp,%Client,只需要使用整个系统很少的内存;而

把大部份的内存作为计算型内存(%Comp)来使用,这部份内存量主要为ORACLE SGA和PGA所用,其中ORACLE SGA 为

pinned memory.

根据系统内存大小,设定系统可以pin住的最大值:

     maxpin% = 80   --此值可以升高

     v_pinshm = 1   --允许pin住内存

     接下来是三个控制文件型内存的参数的值:

     maxclient% = 10 --文件型内存可使用内存总的百分比的最大值,<=maxperm%

     maxperm% = 10    --文件型内存可使用内存总的百分比的最大值

     minperm% = 5     --文件型内存可使用内存总的百分比的最小值

这三个参数,可以根据内存总量大小,进行适度调节。计算型内存与文件型内存,在实际的应用中,需要遵循

以下一些原则(前3条是参考别人的):

     1.使用的文件型内存百分比 + 使用的计算型内存百分比 < 100%

     2.计算型内存中的pinned memory设置要合理,即sga大小要设置合理,要留一部份给OS,OS也需要pinned

memory.当系统资源紧张时,OS的pinned memory具有最高的优先级.

     3.保证系统非pinned 计算型 memory有一个合理的成长空间,这部份主要是给ORACLE PGA使用,当连接数

增长过快时,此内存的使用增长也相当的明显,而此增长很有可能会导致操作系统的交换。

     当系统的使用的文件型内存百分比 + 使用的计算型内存百分比 >= 100%,系统便开始产生交换,系统的

PAGING SPACE会持续的增长,影响到产品库的安全。

     4.一般的数据库服务器,文件型内存可以使用较少的空间,因为文件型内存并不主动释放,可能造成内存

资源的短缺及Paging Space使用率过高,所以数据库服务器上maxclient、maxperm、minperm的值不宜过大,典

型值如下:

     maxclient% = 8   

     maxperm% = 12  

     minperm% = 5   

如何更改这三个参数呢, 在AIX5.3上,可以使用 vmo 命令,此命令设置或显示所有虚拟内存管理器调整参数

的当前值或下一个引导值。还可以用此命令进行永久性更改,或将更改推迟到下一次重新引导之后生效。此命令

是设置参数还是显示参数,要由所带标志来决定。带 -o 标志的话,两个操作都执行。它既可以显示参数的值,

也可以为参数设置新值。

如果在修改这些参数前,想查看这些参数的值,则可以用下面的命令:

vmo -L 或者 vmstat -v 或者vmo -a

调整:vmo -p -o maxclent%=8

     vmo -p -o maxperm%=12

     vmo -p -o minperm%=5

利用-p参数,是立即生效的,不需要重启,下次重启仍然有效。

如果是-r参数,是不立即生效的,重启生效,turns on the updating of the
/etc/tunables/nextboot file.重启生效的参数记录在 /etc/tunables/nextboot。


因为参数maxperm充当的是软限制,所以文件型内存的占用率仍然可以超过maxperm的设定值,如果需要进行强制

限制,则需要将参数strict_maxperm的值设为1,该参数的缺省值是0,但此方法需要谨慎使用。

备注:也许有人不是很熟悉vmo,反而熟悉vmtune,其实他们是一样的

AIX 5.3以前,查看参数值 vmtune -a

            修改minperm和maxperm的值为5%和20%,vmtune -p 5 -P 20

            如果是64位内核,vmtune64 -p 5 -P 20

AIX 5.3:    vmo -p -o maxperm%=20

            vmo -p -o minperm%=5

 


------------------------------------------------------------
=-==========================================================

AIX 5.3主机性能评估-Memory性能评估
发布: 2009-8-07 14:03 | 作者: webmaster | 来源: BBS整理 | 查看: 39次

  1.4.1VMM的管理简介
  首先,还是简单讲解一下内存以及的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
  
                 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

                 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  3)        如果minperm      如果系统在向调页空间调出页面,可能使因为内存中的文件页数低于maxperm,从而也调出了部分的计算页面以达到maxfree的要求。在这种情况下,可以考虑把maxperm降低到低于numperm的某个值,从而阻止计算页面的调出。在5.2 ML4以后的版本中,为了防止计算页面被调出,可以采用另外一个方法,就是设置参数lru_file_repage=0。将该参数设为0,则告诉vmm在进行页面替换的时候,优先替换文件页面。
      maxclient通常应该设置为一个小于或者等于maxperm的值。
      增强JFS文件系统为它的缓冲区高速缓存使用客户机文件,这不受maxperm和minperm的影响。为了在限制增强JFS文件系统使用高速缓存,可以指定maxclient的值,避免在它进行页面替换的时候,替换其他类型的页。
  www.ixdba.net

  
  
  1.4.2    使用vmstat确定内存的使用情况
      主要检查vmstat输出的 memory和pages列和faults列。详细的说明见前一节cpu评估说明。
    
  1.4.3    svmon命令
  # svmon -G -i 2 2
                 size      inuse       free        pin    virtual
  memory      2097136     236845    1860291     152150     194943
  pg space    1048576        960
  
                 work       pers       clnt      lpage
  pin          151904        246          0          0
  in use       194960      41885          0          0
                 size      inuse       free        pin    virtual
  memory      2097136     236853    1860283     152150     194947
  pg space    1048576        960
  
                 work       pers       clnt      lpage
  pin          151904        246          0          0
  in use      
  194964      41889          0          0
  
  memory段
  ?         size 物理内存总页数。4KB/页
  ?         inuse 物理内存中正在使用的内存页面数。包含活动进程和已经终止的进程的持久文件页面。
  ?         free 空闲列表中的页面数量
  ?         pin 锁定在内存中的页面数量(锁定的意思就是不能被替换出去)
  ?         virtual
  pg space段
  
  ?         size 调页空间总大小
  ?         inuse 已经分配页的总数,也就是已经使用的调页空间页数
  pin段
  ?         work 物理内存中的工作页面数
  ?         pers 物理内存中的持久页面数
  ?         clnt 物理内存中的客户机页面数(客户机页面就是一个远程文件页面)
  inuse段
  ?         work 物理内存中的工作页面数
  ?         pers 物理内存中的持久页面数
  ?         clnt 物理内存中的客户机页面数(客户机页面就是一个远程文件页面)
  
  
  3、ps命令显示当前运行的进程状态信息。
  运行下列命令,显示内存占用前10位的进程。
  # ps gv |sort +6b -nr |head -10
   2490538      - A    191:56    0 11840 32748    xx 45762 20924  0.1  0.0 ora_j00
   2039970      - A    592:59   11 11728 32648    xx 45762 20924  0.3  0.0 ora_j00
   2588922      - A    1118:31   22 11712 32632    xx 45762 20924  0.6  0.0 ora_j0
   2523168      - A    305:01    1 11688 32608    xx 45762 20924  0.2  0.0 ora_j00
   2474214      - A     0:01    0 11588 32512    xx 45762 20924  0.1  0.0 ora_j00
   2007282      - A     0:01    0 10384 31308    xx 45762 20924  0.0  0.0 ora_j00
    508120      - A    32:58  662  9344 27164    xx 45762 20924  0.0  0.0 ora_dbw
   1351908      - A     0:02    1  5668 26560    xx 45762 20924  0.0  0.0 oracleo
   3801250      - A    203:22    0  5648 26556    xx 45762 20924  0.1  0.0 oracleo
  3915976      - A     0:00    0  5664 26556    xx 45762 20924  0.0  0.0 oracleo
      如果是oracle的一些进程占用了过度的内存,我们也可以通过前面类似的进程处理方法来分析。
  
  1.4.4内存的调整
  具体调整需要结合系统运行的应用程序对症下药,如调整minperm/maxperm将改变内存与PAGING SPACE之间的交换算法,调整minpgahead/maxpgahead将改变内存块请求机制,调整minfree/maxfree将改变内存紧张时的内存清理刷新机制,等等。如果数据库使用裸设备,并且没有太多其他的应用,因为裸设备不需要文件系统的缓存,所以可以降低minperm,maxperm,maxclient的默认值,降低操作系统对内存的不必要的占用。
  案例:
  计费数据库数据库响应变慢,内存16G,裸设备,却存在很多的PI,PO情况。
  
  在检查与内存相关的系统参数,发现如下问题:
  minperm% = 20,  maxperm% = 80, maxclient% = 80
  说明:以上三个参数为系统缺省配置,其表示,使用文件系统时,最多可使用80% * 16G=10.8G,用于缓存所访问的文件。
  结论:由于以上参数采用系统缺省配置,文件系统缓存最大可以达到10.8G,在执行大量的文件cp操作后,系统的可用内存量迅速下降,在其后的计费过程中,由于大量page in/page out操作引起系统严重性能瓶颈。
  优化:
  将maxperm% = 30 ,maxclient% = 30
  #vmo –o maxperm%=30 –P
  #vmo –o maxclient%=30 –P
  5.2以前版本
  /usr/samples/kernel/vmtune –p 20 –P 30
  /usr/samples/kernel/vmtune –t 30