Aix内存优化

一、svmon
# svmon
               size      inuse       free        pin    virtual
memory      1048576     946885     101691     133404     311202
pg space     262144      31284
               work       pers       clnt      lpage
pin          133404          0          0          0
in use       289752       8615     648518          0
解释:内存配置4GB (1048576), 其中已经使用 3.61GB(946885),还空闲388MB (101691)
在已经使用的内存里,应用程序使用了1.15GB (289752),文件缓存使用了2.57GB(648518)
列出内存占用率排名前15名的进程和相关信息.
# svmon -Pt15 | perl -e 'while(<>){print if($.==2||$&&&!$s++);$.=0 if(/^-+$/)}'

二、sar
sar的缺省输出(显示了 CPU 使用情况)
-bash-3.00$ sar
SunOS unknown 5.10 Generic_118822-23 sun4u    01/20/2006
00:00:01    %usr    %sys    %wio   %idle
00:10:00       0       0       0     100
. cut ...
09:30:00       4      47       0      49

Average        0       1       0      98

sar 命令输出中的每一行都是一项单独的度量,并且在最左边的列中显示了时间戳。其他列中则存放了相应的数据。(根据命令行所使用参数的不同,这些列也会有所不同。)在清单 2 中,CPU 使用情况被分解为四种类别:
?    %usr: CPU 花费在用户进程(如应用程序、Shell 脚本或与该用户进行的交互)上的时间的百分比。
?    %sys: CPU 用来执行核心任务的时间的百分比。在本示例中该数字比较大,这是因为我正从核心随机数生成器获取数据。
?    %wio: CPU 等待块设备(如磁盘)输入或输出的时间的百分比。
?    %idle: CPU 未进行任何有用操作的时间的百分比。
最后一行是所有数据点的平均值。然而,因为大多数系统都会在忙时间段后经历空闲时间段,所以平均值并不能反映完整的情况。
同时,对磁盘活动也进行了监视。高磁盘使用率意味着,从磁盘请求数据的应用程序更有可能会被阻塞(暂停),直到磁盘为该进程做好准备。通常,解决方案涉及到将文件系统拆分到不同的磁盘或阵列。然而,第一步是要知道出现了问题。
sar -d 的输出显示了一个度量时间段内各种与磁盘相关的统计数据。为了更加简洁,清单 3 仅显示了硬盘驱动器的活动。
sar -d 的输出(显示了磁盘活动)

$ sar -d
SunOS unknown 5.10 Generic_118822-23 sun4u    01/22/2006

00:00:01   device       %busy   avque   r+w/s blks/s avwait avserv
. cut ...
14:00:02   dad0             31     0.6      78   16102     1.9     5.3
           dad0,c            0     0.0       0       0     0.0     0.0
           dad0,h           31     0.6      78   16102     1.9     5.3
           dad1              0     0.0       0       1     1.6     1.3
           dad1,a            0     0.0       0       1     1.6     1.3
           dad1,b            0     0.0       0       0     0.0     0.0
           dad1,c            0     0.0       0       0     0.0     0.0
和前面的示例一样,最左边的是时间。其他列如下:
?    device: 这是指正在进行测量的磁盘或磁盘分区。在 Sun Solaris 中,必须通过查找 /etc/path_to_inst 中所报告的名称将该磁盘转换为物理磁盘,然后将该信息交叉引用到 /dev/dsk 中的项目。在 Linux? 中,使用了磁盘设备的主从设备号。
?    %busy: 这是读取或写入设备的时间的百分比。
?    avque: 这是用来串行化磁盘活动的队列的平均深度。avque 的值越大,发生的阻塞就越多。
?    r+w/s、blks/s:这分别是用每秒的读或写操作和磁盘盘块来表示的磁盘活动。
?    avwait:这是磁盘读或写操作等待执行的平均时间(单位为毫秒)。
?    avserv:这是磁盘读或写操作所执行的平均时间(单位为毫秒)。
其中的一些数值,如 avwait 和 avserv 值,直接关系到用户体验。磁盘的高等待时间可能表示多个人正在竞争使用该磁盘,这一点可以通过高 avque 数值来证实。高 avserv 值表示磁盘的速度较慢。
同时还收集了许多其他的项目,可使用相应的参数来查看它们:
?    -b 参数显示了缓冲区信息和使用缓冲区与必须写磁盘的比率。
?    -c 参数显示了系统调用分解为一些常用的调用,如 fork()、exec()、read() 和 write()。高进程创建会导致较差的性能,并且这是可能需要将一些应用程序转移到其他计算机的信号。
?    -g、-p 和 -w 参数显示了分页(交换)活动。高分页操作是内存缺乏的信号。特别地,-w 选项显示了进程切换的次数:高的数值表示计算机上运行的内容过多,该计算机在切换任务上花费了比实际工作更多的时间。
?    -q 参数显示了运行队列的大小,它与当时的平均负载相同。
?    -r 参数显示了一段时间的可用内存和交换空间。

三、关于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内存优化)