Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1450752
  • 博文数量: 239
  • 博客积分: 5909
  • 博客等级: 大校
  • 技术积分: 2715
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-24 20:19
文章分类

全部博文(239)

文章存档

2014年(4)

2013年(22)

2012年(140)

2011年(14)

2010年(59)

我的朋友

分类: BSD

2012-06-04 16:48:09

系统Memory性能评估 的管理简介

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

空闲列表维护

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

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

文件占用内存的比率维护

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

# 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

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

# vmstat -v |grep perm

                  5.0 minperm percentage

                 20.0 maxperm percentage

                 19.8 numperm percentage

系统调页的规则

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

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

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

如果系统在向调页空间调出页面,可能使因为内存中的文件页数低于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

故障

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和网络信息包速率高很多, 都应进行进一步调查.

内存)

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表示空闲的页面数.

磁盘交换

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 -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

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

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

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

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

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

Size(): 调页空间总大小

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

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

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

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

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

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

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

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

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

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

# 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

[YOU HAVE NEW MAIL]

$ 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.

$

内存的调整

具体调整需要结合系统运行的应用程序对症下药,如调整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

转自: http://blog.csdn.net/47522341/article/details/4359197
阅读(1952) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~