AIX系统Memory性能评估

    技术2022-05-19  18

    AIX系统Memory性能评估

    , VMM的管理简介

    1.1 空闲列表维护

    1.2 文件占用内存的比率维护

    1.3 vmstat命令显示内存中的数据页数

    使用vmstat确定内存的使用情况

    2.1 faults故障

    2.2 memory(内存)

    2.3 page磁盘交换

    , svmon命令

    3.1 memory

    3.2 pg space

    3.3 pin 

    3.4 inuse 

    4, ps命令显示当前运行的进程状态

    5, 内存的调整

    AIX系统Memory性能评估

    , VMM的管理简介

    内存和交换空间(虚拟内存)一般都是用页面来进行分配和管理的在内存中存在两种类型的页面:计算页面(一般为可执行文件段的页面)和文件页面(存储的数据文件的页面). 当我们执行程序或者读入数据的时候内存中的页面就逐渐被占用当空闲的内存只剩下minfree的时候, vmm的调页进程就被唤醒通过调页算法将内存中的页面转移到交换空间中直到空闲内存达到maxfree, 才停止调页.

    1.1 空闲列表维护

    在这里我们涉及到两个参数:

    1, minfree: 最小空闲页链表尺寸一旦低于该值系统调页进程启动偷页以填充空闲页链表保证有足够的内存页面偷页就是将不常用的页面替换出去.

    2, maxfree: 最大空闲页链表尺寸一旦高于该值系统停止偷页.

    一般情况下, minfreemaxfree通过下面的公式得到.

    Maxfree=minmum(memory/128,128), minfree=maxfree-8

    如果发现空闲列表不足可以用下面的方法增加.

    5.2以上的版本中可以通过vmo参数实现.

    #vmo –o minfree = 1000 –o maxfree = 1008 –P   #-P参数使得修改永久生效.

    AIX5.2之前的版本需要使用/usr/samples/kernel/vmtune命令

    Vmtune –f 1000 –F 1008

    1.2 文件占用内存的比率维护

    数据文件占用的内存不会主动释放所以容易造成内存的文件页面过高的占用导致其他的应用内存使用紧张这里有两个参数跟这个占用相关.

    vmo -a |grep perm

                  maxperm = 392704

                 maxperm% = 20

                  minperm = 98175

                 minperm% = 5

           strict_maxperm = 0

    如上所示的两个参数解释如下:

    1, minperm: 用户IO文件访问的最小缓冲页数;

    2, maxperm: 用户io文件访问的最大缓冲页数;

    这里主要与性能相关的是maxperm. Maxperm参数指定了文件页面可以占用内存的上限.调整参数值的方法如下.

    Aix5.2以上的版本使用vmo命令

    #vmo –o maxperm%=80 –o minperm%=20

    Aix5.2之前的版本一样要使用vmtune命令

    #vmtune –p 20 –P 80 –P

    1.3 vmstat命令显示内存中的数据页数

    vmstat -v |grep perm

                      5.0 minperm percentage

                     20.0 maxperm percentage

                     19.8 numperm percentage

    系统调页的规则

    1, 如果numperm>maxperm, 则只调出文件页面;

    2, 如果numperm<minperm, 则同时调出文件页面和计算页面.

    3, 如果minperm<numperm<maxperm, 则只调出文件页面除非新调入的文件页面大于计算页面的总和.

    如果系统在向调页空间调出页面,可能使因为内存中的文件页数低于maxperm,从而也调出了部分的计算页面以达到maxfree的要求。在这种情况下,可以考虑把maxperm降低到低于numperm的某个值,从而阻止计算页面的调出。在5.2 ML4以后的版本中,为了防止计算页面被调出,可以采用另外一个方法,就是设置参数lru_file_repage=0。将该参数设为0,则告诉vmm在进行页面替换的时候,优先替换文件页面。

    maxclient通常应该设置为一个小于或者等于maxperm的值。

    增强JFS文件系统为它的缓冲区高速缓存使用客户机文件,这不受maxpermminperm的影响。为了在限制增强JFS文件系统使用高速缓存,可以指定maxclient的值,避免在它进行页面替换的时候,替换其他类型的页。

    使用vmstat确定内存的使用情况

    该命令可迅速提供关于各种系统资源和与之相关的性能问题的简要信息

    作为一个cpu监视器, vmstat命令优于iostat命令因为vmstat命令是滚动的使得它的每一行报告的输出更容易扫描并且如果有很多磁盘链接到系统中由此所涉及到的开销更少

    vmstat 2

    System configuration: lcpu=8 mem=8192MB

    kthr    memory              page              faults        cpu    

    ----- ----------- ------------------------ ------------ -----------

     r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

     0  0 1596212 186517   0   0   0   0    0   0 157 2242 757  5  0 95  0

     1  0 1602824 179905   0   0   0   0    0   0 276 8731 986 23  1 76  0

     1  0 1609397 173332   0   0   0   0    0   0 298 5696 1118 27  1 72  0

     1  0 1609407 173322   0   0   0   0    0   0 276 5630 1046 23  1 77  0

     1  0 1609593 173136   0   0   0   0    0   0 1209 10754 3699 10  3 87  0

     1  0 1609630 173099   0   0   0   0    0   0 637 8595 2061 26  1 72  0

    要检查内存是否是瓶颈考虑vmstat报告中的memory, pages列以及faults

    2.1 faults故障

    kthr    memory              page              faults        cpu    

    ----- ----------- ------------------------ ------------ -----------

     r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

     0  0 1596212 186517   0   0   0   0    0   0 157 2242 757  5  0 95  0

     1  0 1602824 179905   0   0   0   0    0   0 276 8731 986 23  1 76  0

    In:

    每秒设备中断数

    Sy:

    每秒系统调用次数

    Cs:

    每秒钟的上下文切换次数物理cpu资源细分为10毫秒的逻辑时间片假设一个线程调度被运行它将一直运行直到它的时间片用完,或被抢先,或者自愿放弃cpu控制权当给予另一个线程cpu控制权时必须保存前一个线程的上下文或工作环境并且必须装入当前线程的上下文操作系统有一个很有效的上下文切换过程所以每次切换并不耗资源任何上下文切换的显著增加如当cs比磁盘io和网络信息包速率高很多都应进行进一步调查.

    2.2 memory(内存)

    kthr    memory              page              faults        cpu    

    ----- ----------- ------------------------ ------------ -----------

     r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

     0  0 1596212 186517   0   0   0   0    0   0 157 2242 757  5  0 95  0

     1  0 1602824 179905   0   0   0   0    0   0 276 8731 986 23  1 76  0

     1  0 1609397 173332   0   0   0   0    0   0 298 5696 1118 27  1 72  0

    Avm列表表示活动虚拟内存的页面数每页一般4KB

    Fre表示空闲的页面数.

    2.3 page磁盘交换

    kthr    memory              page              faults        cpu    

    ----- ----------- ------------------------ ------------ -----------

     r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

     0  0 1596212 186517   0   0   0   0    0   0 157 2242 757  5  0 95  0

     1  0 1602824 179905   0   0   0   0    0   0 276 8731 986 23  1 76  0

     1  0 1609397 173332   0   0   0   0    0   0 298 5696 1118 27  1 72  0

    Re: 该列无效

    Pi: 从磁盘交换到内存的交换页(调页空间)数量, 4KB/当进程访问一个交换页时就产生一个缺页故障

    Po: 从内存交换到磁盘的交换页数量, 4KB/如果写入的交换页在交换区间内不存在或者已经做了修改则写入交换区间如果不被再次访问则会留在调度空间中直到进程终止或者放弃空间.

    Fr: 根据页面替换算法每秒释放的页数. VMM的页面替换例程会定时扫描页面祯表以释放一些长时间没有访问的数据页到空闲列表在这个过程中计算页面不会产生IO, 工作页面如果数据没有发生修改也不需要写回磁盘不会产生IO.

    Sr: 为了释放页面扫描的页数. Sr值如果比fr值高很多说明替换算法要查找可疑替换的页面越困难.

    Cy: 每秒页面替换代码扫描了PFT多少次因为增加空闲列表达到maxfree不一定需要完全扫描PFT就是说这个值一般会小于1, 而所有vmstat输出都为整数所以cy通常为0.

    , svmon命令

    Svmon主要用来捕获并分析虚拟内存快照.

    # svmon -G -i 2 2

                   size      inuse       free        pin    virtual

    memory      2097152    2007242      89910     488437    1598949

    pg space    4194304       4268

                   work       pers       clnt      other

    pin          303244          0       1802     183391

    in use      1598949          0     408293

    PageSize   PoolSize      inuse       pgsp        pin    virtual

    s   4 KB          -    1934298       4268     434309    1526005

    m  64 KB          -       4559          0       3383       4559

                   size      inuse       free        pin    virtual

    memory      2097152    2007238      89914     488439    1598945

    pg space    4194304       4268

                   work       pers       clnt      other

    pin          303246          0       1802     183391

    in use      1598945          0     408293

     

    PageSize   PoolSize      inuse       pgsp        pin    virtual

    s   4 KB          -    1934294       4268     434311    1526001

    m  64 KB          -       4559          0       3383       4559

    3.1 memory

    Size(大小): 物理内存总页数. 4KB/

    Inuse(正在使用): 物理内存中正在使用的内存页面数包含活动进程和已经终止的持久文件页面.

    Free(空闲): 空闲列表中的页面数量

    Pin(固定内存): 锁定在内存中的页面数量(锁定的意思就是不能被替换出去)

    Virtual(虚拟内存):分配于系统虚拟空间的页数.

    3.2 pg space

    Size(): 调页空间总大小

    Inuse(): 已经分配页的总数也就是已经使用的调页空间页数

    3.3 pin 

    指定包含固定内存的页面的实际内存的子集上的统计信息

    Work(): 物理内存中的工作段内存的页数

    Pers(): 物理内存的持久段页面的帧数.

    Clnt(): 物理内存中客户段页面的帧数.

    3.4 inuse 

    指定正在使用的实际内存子集的统计信息

    Work(): 物理内存中的工作段内存的页数

    Pers(): 物理内存的持久段页面的帧数.

    Clnt(): 物理内存中客户段页面的帧数.

    4, ps命令显示当前运行的进程状态

    ps gv | sort +6b -nr |head -10

    PID  TTY STAT TIME PGIN SIZE RSS   LIM  TSIZ   TRS %CPU %MEM COMMAND

    561232      - A    30:59    0  9248 84184    xx 50614 74936  0.0  1.0 ora_pmon

    454728      - A     0:14    0  8900 83836    xx 50614 74936  0.0  1.0 ora_s000

    729338      - A     3:12    0  8840 83776    xx 50614 74936  2.0  1.0 oracleSI

    581808      - A    1710:17    6  8528 83464    xx 50614 74936  0.1  1.0 ora_lms0

    942332      - A     2:24    7  8500 83436    xx 50614 74936  0.0  1.0 ora_arc0

    868444      - A     1:06   39  8496 83432    xx 50614 74936  0.0  1.0 ora_arc1

    442494      - A    1715:12    9  8372 83308    xx 50614 74936  0.1  1.0 ora_lms1

    647186      - A    98:48   12  7912 82848    xx 50614 74936  0.0  1.0 ora_lmd0

    725148      - A     5:09    0  7460 82396    xx 50614 74936  1.8  1.0 oracleSI

    573582      - A    143:00    0  7068 82004    xx 50614 74936  0.0  1.0 ora_lmon

    我们可以用下面的方法查看具体的进程在干什么事情.

    例如我们查看PID = 487432的进程可以使用下面的方法.

    # su - oracle

    $ sqlplus /nolog

    SQL*Plus: Release 10.2.0.3.0 - Production on Tue Jul 14 17:24:42 2009

    Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

    SQL> conn / as sysdba

    Connected.

    SQL> oradebug setospid 487432

    Oracle pid: 12, Unix process pid: 487432, image: oracle@i2db (MMNL)

    SQL> oradebug event 10046 trace name context forever,level 8

    Statement processed.

    SQL> oradebug tracefile_name

    /oracle/admin/arpdb/bdump/arpdb_mmnl_487432.trc

    SQL> oradebug event 10046 trace name context off

    Statement processed.

    SQL> exit

    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

    With the Partitioning, OLAP and Data Mining options

    tkprof /oracle/admin/arpdb/bdump/arpdb_mmnl_487432.trc

    output = arpdb_mm1.txt

    TKPROF: Release 10.2.0.3.0 - Production on Tue Jul 14 17:31:29 2009

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    $

    5, 内存的调整

    具体调整需要结合系统运行的应用程序对症下药,如调整minperm/maxperm将改变内存与PAGING SPACE之间的交换算法,调整minpgahead/maxpgahead将改变内存块请求机制,调整minfree/maxfree将改变内存紧张时的内存清理刷新机制,等等。如果数据库使用裸设备,并且没有太多其他的应用,因为裸设备不需要文件系统的缓存,所以可以降低minpermmaxpermmaxclient的默认值,降低操作系统对内存的不必要的占用。

    案例:

    计费数据库数据库响应变慢,内存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

     

     


    最新回复(0)