aix 中交换空间理解

简介: AIX的内存页面大小为4K, 是虚拟内存管理(VMM)的最小单位. 页面空间也可以被称为交换空间(paging space), 创建在属性类型为paging的逻辑卷(logic volume LV)上.

AIX的内存页面大小为4K, 是虚拟内存管理(VMM)的最小单位. 页面空间也可以被称为交换空间(paging space), 创建在属性类型为paging的逻辑卷(logic volume LV)上. 交换空间是一项很重要的设备. AIX kernel需要利用paging space来管理虚拟内存.系统安装时创建的默认页面LV是hdisk0上的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 ] [ -iInterval [ 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段可能使用交换区,但persistent和client不会使用交换区.

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表示是否当时激活。

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

新增加10个pp

#chps -s’10′ paging00

减少10个pp

#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的大小来创建分页空间.在投入运行之后, 要经常监视系统, 如果看到分页空间的利用率从来都没有接近过百分之五十, 就不需要添加额外的空间. Oracle为AIX提供的文档推荐设置交换空间为RAM大小的一半加上4GB, 但是上限为32GB.





相关文章
|
4月前
|
存储 监控 算法
在Linux中,什么是交换空间?
在Linux中,什么是交换空间?
|
4月前
|
Ubuntu Linux
在Linux中,虚拟内存和交换空间作用是什么?
在Linux中,虚拟内存和交换空间作用是什么?
如何设置交换区swap空间
如何设置交换区swap空间
123 0
|
Linux
7.5 内存交换空间(swap)之创建
7.5 内存交换空间(swap)之创建
208 0
|
存储 缓存 Windows
磁盘概述、磁盘缓存、虚拟内存及虚拟内存与内存的交换方式
磁盘概述、磁盘缓存、虚拟内存及虚拟内存与内存的交换方式
291 0
|
缓存 Linux
linux swap交换分区详解
linux swap交换分区详解
|
存储 监控 固态存储
关于Linux系统的swap交换空间
用 Ubuntu 已经将近 1 年了,最近重装了 16.04 之后,每天到下午 5 点左右,都会发现 Swap 交换空间有几百兆的写入,系统内存 8G,硬盘是 SSD,i5 处理器,配置中档,也没有启动什么大型软件,就是用 IDEA 做开发,虽然没有影响,但本着一颗求知的心,google 一下,第一篇是 《All about Linux swap space》,口气很大,直接翻译了。
254 0
关于Linux系统的swap交换空间
|
Linux
linux配置交换空间
linux配置交换空间
213 0