AIX交换磁盘空间

AIX交换空间管理与查看... 2

, 交换磁盘空间概念... 2

1.1 虚拟内存... 2

1.2 虚拟内存管理器(VMM) 2

1.3 交换(分页)空间概念... 3

1.4请求分页... 3

, 查看交换磁盘空间... 4

2.1 lsps命令... 4

2.2 使用vmo命令检查AIX如何处理分页空间分配... 4

2.3 vmstat监视分页控件的颠簸... 5

2.4 svmon检查正在使用交换空间的进程... 5

2.5 交换空间检查实例... 8

, 管理交换磁盘空间... 9

, 优化交换磁盘空间... 9


AIX
交换空间管理与查看

AIX的内存页面大小为4K, 是虚拟内存管理(VMM)的最小单位. 页面空间也可以被称为交换空间(paging space), 创建在属性类型为paging的逻辑卷(logic volume LV). 交换空间是一项很重要的设备. AIX kernel需要利用paging space来管理虚拟内存. 系统安装时创建的默认页面LVhdisk0上的hd6, 也叫主交换空间.

AIX5L默认采用交换空间的延迟分配策略(deferred page space allocation), 利用环境变量psalloc来控制内存的机制与页面的分配策略, 缺省设置是late. 在这种设置下, 知识需要用到的时候, 才去分配交换空间, 正常情况下, 不需要很大的交换空间, 所以适合大内存的系统, 可以减少很多paging space资源的浪费.

, 交换磁盘空间概念

1.1 虚拟内存

内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内里储存的文件释放到原来的安装目录里了。

允许设置的虚拟内存最小值为2MB,最大值不能超过当前硬盘的剩余空间值,同时也不能超过操作系统的内存寻址范围。

1.2 虚拟内存管理器(VMM)

VMM服务于来自系统以及应用程序的内存请求. 虚拟内存段以页为单位进行分区, 每个页面大小为4KB.VMM就是用来管理这些存储页面.

1, 实际内存管理

AIX中,虚拟内存段被分成4096字节大小的页,物理内存则被划分为4096字节大小的页帧(page frame),VMM主要有以下两个主要功能:
(1)
管理页帧的分配

(2)
解析对当前没有调入RAM中的虚拟内存页的引用

   
为了完成上述功能,VMM维护一个可用帧列表,并且使用一个页面替换算法决定哪些当前在RAM中的虚拟内存页使用的页帧将被分配到可以可用帧列表。页面替换算法将考虑永久段(Persistent segment)和工作段(Working segment)的分配、页交换和VMM阈值等因素。

2, 永久段(Persistent segment)和工作段(Working segment

 AIX 区分不同的存储段类型。理解不同的存储段类型,特别是工作段和永久段的区别非常重要。

永久段在磁盘上有一个永久的存储位置。含有不可编辑数据的文件或者只读的运行程序被映射到持久段。VMM 参数控制什么时候分配给永久段的RAM页帧可以被重写,并且用于存储新的数据。

工作段是临时性的,仅在它们被某个进程使用的时候存在,并且没有固定的磁盘位置。进程堆栈以及数据区,共享库文本被映射到工作段。当工作段数据也不能存在于存中的时候,他们被保存在磁盘上的页交换空间。程序退出执行,所有工作段占用的页面被返回。

3, VMM 内存调用控制机制

当一个进程引用一个在磁盘上的虚拟内存页,被引用的页先要换到页帧中,如果内存已经满了,这可能导致一个或更多的页从页帧中换出,以腾出空间。这种情况一般发生在可用页帧数已经很低的情况。而VMM将使用前述页交换算法来满足系统对内存的需要。

一个有效的页交换算法要保持当前活动进程所使用的页总是在RAM中,而非活动进程使用的存储页将被移出。但是当RAM不足的时候,选择移出页将很困难,因为被移出的页可能很快又要被引用,这导致一些页面被频繁的换入换出。系统大部分时间在做页交换而不是执行进程指令。VMM使用存储器调用控制算法来检测这种情况,并予以纠正。

1.3 交换(分页)空间概念

什么是交换(分页)空间?它是与 VMM 有关的。VMM 使用交换(分页)空间存储没有使用活动RAM 的进程。分页空间本身是一个特殊的逻辑卷,它存储了当前不访问的信息。您必须确保您的系统拥有足够的分页空间。如果分页空间过小,整个进程可能会丢失,并且当所有的空间都占满后,系统可能会崩溃。尽管值得再次说明,分页空间是 VMM 中的一部分,但是更重要的是真正地理解内核如何将进程调入到 RAM 中,过多的分页肯定会对性能造成影响。AIX 通过将内核与 VMM 紧密集成在一起,实现了一种称为请求分页的方法。

1.4请求分页

在这个部分中,我介绍了 AIX 如何处理分页,给出了交换和分页的定义,并深入地研究了分页空间分配的几种不同模式。这些概念可以帮助您理解后续有关监视、配置和优化的部分。

大多数管理员都认为分页是一件很麻烦的事情。实际上,分页是 AIX 所完成的任务中非常必要的一部分,这是由于 AIX 内核与 VMM 及其请求分页的实现进行了紧密的集成。请求分页的工作原理是,内核一次仅加载部分页面到实际内存中。当 CPU 需要另一个页面时,它会到 RAM 中查找。如果无法在 RAM 中找到这个页面,则出现一次缺页,然后向内核发出信号以便从磁盘中加载更多的页面到 RAM。请求分页的一个优点是,分页空间不需要非常大,因为数据总是在分页空间和 RAM 之间不断地交换。在较早的 UNIX® 系统中,将分页预先分配到磁盘,无论使用还是不使用它们。这使得所分配的磁盘空间可能永远不会被使用。从本质上说,请求分页可以避免盲目地分配磁盘空间。应该使得进程的交换最少,因为许多任务可能存储在 RAM 中。的确如此,因为进程(页面)只有一部分存储在 RAM 中。

交换指的是什么呢?尽管分页和交换通常可以互换使用,但它们之间存在细微的区别。如前所述,在进行分页时,进程的部分内容将在磁盘和 RAM 之间来回移动。当发生交换时,会将整个进程来回移动。为了支持这种情况,在将进程移动到分页空间之前,AIX 会挂起整个进程。只有在将进程交换回 RAM 之后,才能够继续执行它。出现这样的情况并不是很好,您应该尽量防止交换的发生,交换可能会导致另一种称为颠簸的情况(稍后将介绍这个内容)发生。

, 查看交换磁盘空间

2.1 lsps命令

Lsps主要用来显示调页空间的特征.

lsps { -s | [ -c | -l ] { -a | -t { lv | nfs } | PagingSpace } }

1, -a, 指定要给出的所有调页空间的特征.

# lsps -a

Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type

hd6             hdisk0            rootvg        8192MB    13   yes   yes    lv

2, -c, 指定输出应该使用冒号格式. 在逻辑分区中以冒号格式给出调页空间大小

# lsps -c -a

#Psname:Pvname:Vgname:Size:Used:Active:Auto:Type

hd6:hdisk0:rootvg:32:13:y:y:lv

3, -l, 指定输出应该使用表格式

 

4, 指定要给出的所有调页空间的概要特征. 如果指定-s标记, 忽略所有其他标记

# lsps -as

Total Paging Space   Percent Used

      8192MB              13%

2.2 使用vmo命令检查AIX如何处理分页空间分配

    # vmo -a | grep def

                 defps = 1

vmo命令用来管理虚拟内存管理器可调参数. –a显示所有可调参数的当前, 重新引导或永久值.

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

2.3 vmstat监视分页控件的颠簸

    # vmstat 2 4

 

System configuration: lcpu=4 mem=3824MB

 

kthr    memory              page              faults        cpu   

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

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

 0  0 479301  2384   0   0   0   0    0   0   5 1045  74  0  0 99  0

 0  0 479300  2385   0   0   0   0    0   0   6  965  86  0  0 99  0

 0  0 479300  2385   0   0   0   0    0   0   5  976  90  0  0 99  0

 0  0 479300  2385   0   0   0   0    0   0   6 1026  79  0  0 99  0

说明

Avm

系统使用的活动虚拟内存量(单位为4K), 不包括文件页面

Fre

空闲内存列表的大小, 一般不应该小于vmo中设置的minfree.

Pi

从交换空间调入的页面数

Po

调出到交换空间的页面数

2.4 svmon检查正在使用交换空间的进程

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

该命令报告进程的语法为

svmon -P [ PID1... PIDN ] [ -r [ -n | -s ] [ -w | -f | -c ] [ -t Count ] [ -u | -p | -g | -v ] [ -i Interval [ NumIntervals] ] [ -l ] [ -j ] [ -z ] [ -m ] [ -q ]

svmon命令是虚拟内存的监视命令, svmon可以用于确认某个程序, 用户, 内存段使用内存或虚存的情况. 它事实上是调用svmon back命令, 在使用svmon命令之前, 必须确定svmon back命令可用, 该命令位置为/usr/lib/perf/svmon_back

svmon在运行过程中可以被中断, 所以,它无法真正成为内存使用情况的快照. 在非常繁忙的系统中, svmon收集的数据和真实的数据有所差距, svmon进程搜集的过程中, vmm可能已经发生改动了.

因为svmon使用的全是vmm中的数据, vmm对内存的视图是基于内存段的, 所以理解svmon的输出, 必须先理解段的概念.

段是一组页的集合, 每个段为256M, 而每页为4KB的虚存, 每帧为4KB的实际内存, 每个段可以被多个进程使用, 每个段属于以下五种类型的一种.

Persistent(持久段): 存放JFS文件或目录.

Working(工作段): 存放进程数据或共享内存段.

Client(): 用于实现虚拟文件系统如NFS, CD-ROM文件系统和JFS2;

Mapping(): 用于实现文件和内存之间的映射关系.

Real memory mapping: 用于对IO空间的访问.

注意, 在段的描述中, 如果paging space使用的节中有一横(-) , 表明该段未使用交换区, working段可能使用交换区, persistentclient不会使用交换区.

1, 列出使用实际内存最多的三个进程.

# svmon -uP -t 3|grep -p Pid | grep '^.*[0-9]'

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  442460 oracle          271187     7953   179711   275344      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

 1155298 oracle          264700     7953   176642   272827      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  323600 oracle          264684     7953   178168   274243      Y     N     N

由上面的显示我们可以计算pid=442460的进程使用的实际内存为 271187*4K = 1059M

说明

PID

表示进程标识符

Command

进程正在运行的命令

Inuse

进程使用的段中的实际内存的页面总数(计算大小应乘以4092B)

Pin

固定内存: 进程使用的段中固定内存的页面总数

Pgsp

交换空间: 进程使用的段在调页空间上保留或使用的页面总数

Virtual

在进程虚拟空间中分配的页面总数

64-bit

64位进程(Y)还是32位进程(N)

Mthrd

进程是否为多线程(Y)

16MB

进程的大页面状态. “M”表示强制性, “Y”表示进程使用或已经使用大页面段, “N”表示进程不使用大页面.

 

2, 列出使用交换区最多的三个进程

svmon -gP -t 5 | grep -p Pid | grep '^.*[0-9]'

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  462924 oracle          264568     7953   188139   283991      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  442460 oracle          271480     7953   179707   275342      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  323600 oracle          264804     7953   178164   274241      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

 1179830 oracle          251210     7953   177081   272633      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  299146 oracle          251246     7953   177065   272687      Y     N     N

由上面的显示计算出, 使用交换空间最大的进程用到的交换区间大小为 188139 * 4092 = 734 MB

3, 查看进程462924使用了哪些文件

# svmon -pP 462924

 

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

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  462924 oracle          264566     7953   188139   283989      Y     N     N

 

    Vsid      Esid Type Description              PSize  Inuse   Pin Pgsp Virtual

       0         0 work kernel segment               s   8068  7931 3849 12181

   40a54 f00000002 work process private              s     27    22    3    29

   6cabf  8fffffff work private load data            s      0     0   36    36

   18026  9ffffffe work shared library               s     13     0   14    14

    30a0  90000000 work shared library text          s   1062     0   68  2759

   1c843         - clnt /dev/fslv03:92               s      2     0    -     -

    84a6         - clnt /dev/fslv01:76408            s      0     0    -     -

   18482         - clnt /dev/fslv01:143871           s      2     0    -     -

   204ac         - clnt /dev/fslv01:76409            s      0     0    -     -

    4525  70000003 work default shmat/mmap           s      0     0    0     0

   244ad         - clnt /dev/fslv03:76               s      6     0    -     -

   184e2  70000005 work default shmat/mmap           s  38968     0 21088 40950

    8926         - clnt /dev/fslv03:88               s      2     0    -     -

    c527         - clnt /dev/fslv01:191039           s      0     0    -     -

   50830         - clnt /dev/fslv03:78               s      2     0    -     -

   344a9  70000007 work default shmat/mmap           s  39557     0 25293 45057

   10540         - clnt /dev/fslv03:75               s      2     0    -     -

   44475         - clnt /dev/fslv03:91               s    635     0    -     -

    8566         - clnt /dev/fslv03:87               s    528     0    -     -

   14941         - clnt /dev/fslv03:85               s      2     0    -     -

   3c4ab         - clnt /dev/fslv03:77               s      0     0    -     -

   408b4         - clnt /dev/fslv03:81               s      2     0    -     -

   444b5         - clnt /dev/fslv03:71               s     36     0    -     -

   4c497         - clnt /dev/fslv01:191040           s      0     0    -     -

   30508  70000006 work default shmat/mmap           s  62488     0 34002 65520

   484b6         - clnt /dev/fslv03:70               s     36     0    -     -

   30748         - clnt /dev/fslv03:79               s      6     0    -     -

   34509  70000008 work default shmat/mmap           s  57007     0 54623 59208

   3ca6b        11 work text data BSS heap           s    318     0 12706 13052

   4c4b7         - clnt /dev/fslv03:69               s     60     0    -     -

   404f4         - clnt /dev/fslv03:68               s      2     0    -     -

   7881a         - clnt /dev/fslv03:80               s      6     0    -     -

   4c4d7         - clnt /dev/fslv03:66               s   8802     0    -     -

   3852a         - clnt /dev/fslv01:76412            s      0     0    -     -

   40514  70000002 work default shmat/mmap           s      0     0    0     0

   484f6         - clnt /dev/fslv03:67               s    600     0    -     -

   6049c        10 clnt text data BSS heap,          s   8518     0    -     -

                        /dev/fslv01:73964                                      

   70478         - clnt /dev/fslv03:84               s      2     0    -     -

   604bc         - clnt /dev/fslv03:86               s      2     0    -     -

    8226  9fffffff clnt USLA text,/dev/hd2:2165      s      9     0    -     -

   48536  80020014 work USLA heap                    s      0     0  104   104

   70498         - clnt /dev/fslv01:190026           s      0     0    -     -

   3c56b         - clnt /dev/fslv03:89               s      6     0    -     -

   684be  70000009 work default shmat/mmap           s  31632     0 33846 38930

   7c47b         - clnt /dev/fslv03:82               s   1370     0    -     -

   784ba         - clnt /dev/fslv03:90               s      2     0    -     -

   54951  9001000a work shared library data          s     18     0   48    89

   744d9         - clnt /dev/fslv03:65               s    980     0    -     -

   50570         - clnt /dev/fslv03:83               s      0     0    -     -

    c687  70000000 mmap maps 1 source(s)             s      0     0    -     -

   6851e  70000004 work default shmat/mmap           s      0     0    0     0

   20a4c  8001000a work private load data            s      1     0  146   146

   3822a  90020014 work shared library               s     58     0   95    96

   34a49  70000001 work default shmat/mmap           s   3580     0  553  4076

   48a16  ffffffff work application stack            s      8     0    6    14

4001  9ffffffd work shared library               s    141     0 1659  1728

说明

VSid

虚拟段标识符, VMM中的唯一段

Esid

有效的段标识符, 只有在段属于进程空间时才有效. 如果vsid段被几个进程映射, 但具有不同的sid, 那么该字段包含”-“.

Type

段的类型

Description

段的文本描述, 列的内容取决于段的类型和用途

Psize

表示该段是否使用大页面

Inuse

段中的实际内存页数

Pin

段中的固定内存页数

Pgsp

该段在调页空间上的页数

Virtual

分配给段的虚拟空间的页数

 

2.5 交换空间检查实例

1, 使用swap命令查看交换磁盘空间信息

    # swap -l

device              maj,min        total       free

/dev/hd6              10,  2      8192MB      7166MB

结果说明, 系统中定义了一个交换分区. 分区使用了8192-7166=1026MB的空间.

2, 检查当前交换空间剩余情况

# lsps -a

Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type

hd6             hdisk0            rootvg        8192MB    13   yes   yes    lv

如果上面显示的%used较高, 则可能会出现危险. 这时需要检查系统登录时间, 如果登录已经很久了, 可以考虑重启系统以轻快数据库缓存, 这样就可以释放虚拟内存.

3, uptime检查系统启动时间

   # uptime

  05:28PM   up 181 days,  16:15,  1 user,  load average: 0.00, 0.00, 0.00

, 管理交换磁盘空间

可以通过如下命令创建一个交换空间

#mkps -s’16′ -n -a datavg hdisk2

其中-s表示pp个数,-n表示启动后是否自动激活,-a表示是否当时激活。

可以采用如下命令改变交换空间大小

新增加10pp

#chps -s’10′ paging00

减少10pp

#chps -d’10′ paging00

    shrinkps: Temporary paging space paging01 created.

    shrinkps: Paging space paging00 removed.

    shrinkps: Paging space paging00 recreated with new size.

对于5L以上的版本,可以直接用chps -d来操作hd6

#chps -d’10′ hd6

    shrinkps: Temporary paging space paging00 created.

    shrinkps: New boot image created with temporary paging space.

    shrinkps: Paging space hd6 removed.

    shrinkps: Paging space hd6 recreated with new size.

    shrinkps: New boot image created with resized paging space.

如果要使交换空间处于非活动状态,可以采用

#swapoff /dev/’paging00′

相反,处于活动状态可以采用

#swapon /dev/’paging00′

如果要删除一个ps交换空间,必须先使这个空间处于非活动状态,然后采用命令rmps删除。如

#rmps ‘paging00′

    rmlv: Logical volume paging00 is removed.

, 优化交换磁盘空间

系统究竟需要多大的交换空间?

首先, 我们认为将分页空间的大小设置为RAM的两倍(以前的基本原则). 通常来说, 如果我的系统拥有超过4GB的内存, 我会按照RAM的大小来创建分页空间.在投入运行之后, 要经常监视系统, 如果看到分页空间的利用率从来都没有接近过百分之五十, 就不需要添加额外的空间. OracleAIX提供的文档推荐设置交换空间为RAM大小的一半加上4GB, 但是上限为32GB.

你可能感兴趣的:(AIX性能调整)