AIX内存调整.docx
《AIX内存调整.docx》由会员分享,可在线阅读,更多相关《AIX内存调整.docx(10页珍藏版)》请在冰豆网上搜索。
AIX内存调整
AIX®虚拟内存管理器(AIXVMM)是一种基于分页的虚拟内存管理器。
一个分页就是一个固定大小的数据块。
分页既可以位于内存中(也就是说,映射到物理内存中的某个位置)、也可以位于磁盘中(也就是说,从物理内存中替换到分页空间或者文件系统)。
AIXVMM有一个非常独特的方面,即缓存的文件数据的管理。
AIXVMM将缓存的文件数据与对其它类型虚拟内存(例如,进程数据、进程堆栈等等)的管理集成到了一起。
它将文件数据缓存为分页,就如同进程的虚拟内存一样。
AIX根据需要将分页映射到实际内存。
如果应用程序引用了某个分页,而该分页并没有映射到实际内存中,那么系统将产生一个缺页。
为了解决缺页,AIX内核会将所引用的分页加载到实际内存中的某个位置。
如果所引用的分页是一个新的分页(也就是说,位于先前从未引用过的进程数据堆中的分页),那么"加载"所引用的分页只需要用零来填充一个实际内存位置(也就是说,提供一个填满零的分页)。
如果所引用的分页是一个预先存在的分页(也就是说,文件中的某个分页、或者先前换出的某个分页),那么加载所引用的分页需要从磁盘(分页空间或者磁盘文件系统)中将该分页读入到实际内存中的某个位置。
在将分页加载到实际内存中之后,它将被标记为未经修改的。
如果某个进程或者内核修改了该分页,那么该分页的状态将更改为已修改的。
这允许AIX跟踪在将某个分页加载到内存之后是否对其进行过修改。
随着系统将更多的分页添加到实际内存中,实际内存中空闲位置(可以包含分页)的数目将会减少。
也可以将空闲位置的数目称为空闲分页框架的数目。
当空闲分页框架的数目达到某个较低的值时,AIX内核就必须清空实际内存中的某些位置,以便重用新的分页。
这个过程也称为分页替换。
AIXVMM提供了一些后台守护进程,专门负责进行分页替换。
其中一个分页替换守护进程称为lrud(显示为ps-k的输出中的lrud)。
lrud守护进程负责在内存分页中进行扫描,并回收某些分页以便为实际内存腾出空间。
当分页替换守护进程确定它希望回收某个特定的分页时,这个分页替换守护进程将执行下面两项操作中的一项:
∙如果该分页经过了修改,那么分页替换守护进程将该分页写入到辅助存储位置(例如,分页空间或者文件系统磁盘)。
将包含该分页的物理内存块标记为空闲,并为其它的分页做好重用的准备。
∙如果该分页没有经过修改,那么分页替换守护进程可以简单地将物理内存块标记为空闲,这样一来,就可以将该物理内存块重用于另一个分页。
在这种情况下,分页替换守护进程不需要将该分页写入到磁盘,因为该分页在内存中的版本并没有经过修改,因此与位于磁盘中(在分页空间中、或者在磁盘文件系统中)的分页副本完全相同。
分页替换守护进程可以根据系统内存的使用情况和可调参数,选择不同类型的分页进行回收。
本文剩下的部分将详细地介绍分页替换守护进程如何选择要进行回收的分页。
分页类型
从本质上看,AIX中一共有两种分页类型:
∙工作存储分页(Workingstoragepages)
∙永久存储分页(Permanentstoragepages)
工作存储
工作存储分页是一些包含易变数据(换句话说,即重新启动后将不复存在的数据)的分页。
在其他的平台中,工作存储内存有时也称为匿名内存。
下面提供了一些由工作存储分页组成的虚拟内存区域的示例:
∙进程数据
∙堆栈
∙共享内存
∙内核数据
当需要将经过修改的工作存储分页替换出(从内存移动到磁盘)时,它们将被写入到分页空间。
不会将工作存储分页写入到文件系统。
当进程退出时,系统将释放其所有的私有工作存储分页。
因此,当进程退出时,系统将释放进程数据和堆栈的工作存储分页。
对于共享内存区域,直到删除共享内存区域之后,才会释放其工作存储分页。
永久存储
永久存储分页是一些包含永久数据(也就是说,重新启动后仍然存在的数据)的分页。
这种永久数据就是文件数据。
因此,永久存储分页就是缓存在内存中的部分文件。
当经过修改的永久存储分页需要换出(从内存移动到磁盘)的时候,会将它写入到文件系统中。
如前所述,可以直接释放没有经过修改的永久存储分页,无需将其写入到文件系统中,因为文件系统包含该数据的原始副本。
例如,如果一个应用程序正在读取某个文件,那么该文件数据将缓存于永久存储分页的内存中。
这些永久存储分页没有经过修改,这意味着并没有在内存中对这些分页进行修改。
因此,内存中的永久存储分页与磁盘中的文件数据完全相同。
当AIX需要清空内存的时候,它只需要"释放"这些分页即可,而不将任何内容写入到磁盘。
如果应用程序对某个文件进行写操作(而不是读操作),那么永久存储分页将是"经过修改的",并且AIX必须在释放这些分页之前将其刷新到磁盘。
您可以将永久存储分页划分为两种子类型:
∙客户端分页
∙非客户端分页
非客户端分页是一些包含缓存的日志文件系统(JFS)文件数据的分页。
非客户端分页有时也称为持久性分页。
客户端分页是一些包含所有其他文件系统(例如,JFS2和网络文件系统(NFS))的缓存数据的分页。
分页分类
为了帮助分页替换守护进程更好地选择用来进行替换的分页,AIX将分页分为下面两种类型:
∙计算性分页
∙非计算性分页
计算性分页是一些用于文本、数据、堆栈和进程的共享内存的分页。
非计算性分页是一些包含正在进行读取和写入的文件的文件数据的分页。
如何对分页进行分类
所有的工作存储分页都是计算性的。
不会将工作存储分页标记为非计算性的。
永久存储分页既可以是计算性的、也可以是非计算性的,这取决于您使用这些分页的方式。
如果一个文件包含某个进程的可执行文本,那么系统会将该文件视为计算性的,并且将该文件中的所有永久存储分页都标记为计算性的。
如果该文件不包含可执行文本,那么系统会将该文件视为非计算性的,并且将该文件中的所有永久存储分页都标记为非计算性的。
当您第一次打开一个文件的时候,AIX内核将创建一个内部VMM对象以代表该文件。
并且将其标记为非计算性的,这意味着所有的文件在一开始都是非计算性的。
随着程序对该文件进行读写操作,AIX内核将该文件的数据作为非计算性的永久存储分页在内存中进行缓存。
如果关闭该文件,那么AIX内核将继续在内存中(在永久存储分页中)缓存该文件的数据。
内核继续缓存该文件是为了提高性能;例如,如果稍后出现了另一个进程,并且它也使用了相同的文件,那么该文件数据仍然位于内存中,并且AIX内核不需要从磁盘读入该文件的数据。
如果某个文件因为指令取出发生了缺页,那么会将非计算性文件转换为计算性状态。
当对某个文件出现进程缺页(意味着该进程引用了文件的部分内容,而这部分内容当前没有缓存在永久存储分页的内存中)的时候,该进程将产生一个缺页。
如果是由于指令取出而导致的缺页(意味着该进程正在尝试加载来自该分页的指令,以便进行相关操作),那么内核会将该文件标记为计算性的。
这涉及到将该文件中的所有分页都标记为计算性的。
一个文件要么完全是计算性的,要么完全是非计算性的。
在将文件标记为计算性文件之后,它将一直保持为计算性文件,直到删除该文件(或者重新启动系统)。
因此,即使移动了该文件、或者对它进行了重命名,该文件仍然标记为计算性的文件。
分页替换
AIX分页替换守护进程一次扫描内存的一个分页,找出要回收的分页以释放内存。
分页替换守护进程必须仔细地选择分页,以便将分页对系统的性能影响降到最低,并且分页替换守护进程将根据可调参数设置和系统情况来选择不同类型的分页。
您可以使用大量的可调参数来控制AIX选择分页进行替换的方式。
minperm和maxperm
minperm和maxperm是两个最基本的分页替换可调参数。
这两个可调参数用于指出AIX内核应该使用多少内存来缓存非计算性的分页。
maxperm可调参数指出应该用于缓存非计算性分页的最大内存量。
在缺省情况下,maxperm是一个"非严格的"限制,这意味着在某些情况下可以超出这个限制。
将maxperm设定为非严格的限制,这允许在具有可用空闲内存的时候,可以在内存中缓存更多的非计算性文件。
通过将strict_maxperm可调参数设置为1,就可以使maxperm限制成为"严格"的限制。
当maxperm是严格限制的时候,即使有可供使用的空闲内存,内核也不允许非计算性分页的数目超出maxperm的限制。
因此,将maxperm作为严格限制的缺点是,非计算性分页的数目不能超出maxperm的限制,并且在系统中具有空闲内存的时候,也不能使用更多的内存。
minperm限制指出应该用于非计算性分页的最低内存量。
非计算性分页的数目称为numperm:
vmstat-v命令可以显示系统的numperm值所占系统实际内存的百分比。
下面的图1给出了有关这些可调参数在不同的系统条件下如何进行工作的概况:
图1.minperm和maxperm限制
当非计算性分页的数目(numperm)大于或者等于maxperm的时候,AIX分页替换守护进程严格地选择非计算性分页(例如,缓存的非可执行文件)进行操作。
当非计算性分页的数目(numperm)小于或者等于minperm的时候,AIX分页替换守护进程将选择计算性分页和非计算性分页进行操作。
在这种情况下,AIX将扫描两类分页,并且回收近来较少使用的分页。
当非计算性分页的数目(numperm)在minperm和maxperm之间的时候,lru_file_repage可调参数将控制AIX分页替换守护进程替换的分页类型(请参见图2)。
lru_file_repage
图2.lru_file_repage可调参数
当numperm在minperm和maxperm之间的时候,如果lru_file_repage可调参数设置为1,那么AIX分页替换守护进程将根据其内部重新分页表来确定选择何种类型的分页进行操作。
AIX内核维护了一个重新分页表,以便确定哪些分页在换出后将很快地换入。
当内核将一个分页换出、然后再将其换入的时候,通常表示这个分页经常会被使用,并且该分页应该保留在内存中。
内核记录了对计算性分页重新分页的次数,以及对非计算性分页重新分页的次数。
然后,AIX内核可以使用这个信息来确定哪一类分页的重新分页工作更加频繁(因而,表示这一类分页正在频繁地使用)。
当lru_file_repage可调参数设置为1时,AIX内核使用这个重新分页信息来确定是否仅选择非计算性的分页进行操作、或者选择计算性的和非计算性的分页进行操作。
如果计算性分页的重新分页速度比非计算性分页的重新分页速度高,那么AIX内核将仅选择非计算性的分页进行操作(因为计算性分页的使用更为频繁)。
如果非计算性分页的重新分页速度比计算性分页的重新分页速度高,那么AIX内核将选择计算性的分页和非计算性的分页进行操作。
在大多数的客户环境中,最理想的方式是始终让内核只选择非计算性的分页进行操作,因为与对非计算性的分页(即数据文件缓存)进行分页相比,对计算性的分页(例如,进程的堆栈、数据等等)进行分页通常会对进程产生更大的性能开销。
因此,可以将lru_file_repage可调参数设置为0。
在这种情况下,当numperm在minperm和maxperm之间的时候,AIX内核始终选择非计算性的分页进行操作。
maxclient
除了minperm和maxperm可调参数之外,还有一个maxclient可调参数。
maxclient可调参数指定应该用于缓存非计算性客户端分页的最大内存量的限制。
因为所有非计算性客户端分页是非计算性永久存储分页总数的子集,所以maxclient限制必须始终小于或者等于maxperm限制。
非计算性客户端分页的数目称为numclient。
vmstat-v命令可以显示系统的numclient值占系统实际内存的百分比。
在缺省情况下,maxclient限制是严格的限制。
这意味着,AIX内核不允许非计算性的客户端文件缓存超出maxclient限制的范围(也就是说,AIX内核不允许numclient超出maxclient)。
当numclient达到maxclient限制时,AIX内核将采用特殊的、仅客户端的模式开始分页替换。
在这种仅客户端的模式中,AIX分页替换守护进程将严格地选择客户端分页进行操作。
监视系统的内存使用情况
AIX提供了几种工具,可用于提供系统中不同分页的计数信息。
vmstat命令
vmstat命令可以报告关于系统的内存使用信息,以及诸如分页替换这样的VMM操作的统计信息。
使用带-v选项的vmstat命令可以显示不同分页类型所使用的实际内存百分比(请参见清单1):
清单1.vmstat-v命令
#vmstat-v
4980736memorypages
739175lruablepages
432957freepages
1memorypools
84650pinnedpages
80.0maxpinpercentage
20.0minpermpercentage<<-system'sminperm%setting
80.0maxpermpercentage<<-system'smaxperm%
setting
2.2numpermpercentage<<%ofmemorycontaining
non-comp.pages
16529filepages<<-#ofnon-comp.pages
0.0compressedpercentage
0compressedpages
2.2numclientpercentage<<-%ofmemorycontaining
non-comp.clientpages
80.0maxclientpercentage<<-system'smaxclient%
setting
16503clientpages<<-#ofclientpages
0remotepageoutsscheduled
0pendingdiskI/Osblockedwithnopbuf
0pagingspaceI/Osblockedwithnopsbuf
2484filesystemI/Osblockedwithnofsbuf
0clientfilesystemI/Osblockedwithnofsbuf
0externalpagerfilesystemI/Osblockedwithnofsbuf
0VirtualizedPartitionMemoryPageFaults
0.00Timeresolvingvirtualizedpartitionmemorypagefaults
因此,在上面的示例中,一共有16529个非计算性的文件分页被映射到了内存中。
这些非计算性的分页使用了2.2%的内存。
在这16529个非计算性的文件分页中,有16503个是客户端分页。
vmstat输出没有提供关于计算性文件分页的信息。
关于计算性文件分页的信息,可以使用svmon命令搜集得到。
svmon命令
还有另一个命令可用于显示关于系统内存使用的信息,即svmon命令。
svmon命令支持大量不同的选项,这些选项用于提供有关系统内存使用的详细信息。
svmon命令的-G选项可以显示不同类型分页所使用的内存量的信息(请参见清单2):
清单2.svmon命令的-G选项
#svmon-G
sizeinusefreepinvirtual
memory786432209710576722133537188426
pgspace1310721121
workpersclnt
pin13353700
inuse188426021284
PageSizePoolSizeinusepgsppinvirtual
s4KB-10396611216892982682
m64KB-6609040386609
要了解系统实际内存的使用情况,svmon显示了下面三列:
∙work----工作存储
∙pers----持久性存储(持久性存储分页都是非客户端分页,即JFS分页。
)
∙clnt----客户端存储
对于每种分页类型,svmon将显示下面两行:
∙inuse----映射到内存中的4K分页的数目
∙pin----映射到内存中的、且固定的4K分页的数目(pin是inuse的子集)
因此,在上面的示例中,一共有188426个工作存储分页映射到内存中。
在这188426个工作存储分页中,有133537个是固定的(也就是说,不能换出的)。
示例中显示没有持久的存储分页(因为系统中没有使用JFS文件系统)。
一共有21284个客户端存储分页,它们中没有一个是固定的。
svmon命令没有显示永久存储分页的数目,但这个数目可以由svmon的输出计算得到。
如前所述,永久存储分页的数目是持久性存储分页数目和客户端存储分页数目的总和。
因此,在上面的示例中,系统中一共有21284个永久存储分页:
0persistentstoragepages+21284clientstoragepages=21284permanentstoragepages
svmon所报告的信息类型与vmstat有一点不同。
svmon报告不同类型内存分页的数目信息,包括工作的、持久的(即非客户端的)和客户端的。
svmon并没有提供计算性分页和非计算性分页的对比信息。
svmon只报告每种分页类型在内存中分页的总数。
与此相反,vmstat可以提供非计算性分页和计算性分页的对比信息。
为了说明这个区别,可以考虑上面的svmon输出示例。
这21284个客户端分页中的某些分页将是计算性的,而这21284个客户端分页中剩下的那些分页将是非计算性的。
要确定这些客户端分页在计算性和非计算性之间的划分,可以使用vmstat命令来确定这21284个客户端分页中有多少分页是非计算性的。
显示并且设置可调参数
vmo命令用于与VMM可调参数进行交互。
vmo命令可以用于显示关于可调参数的信息,以及设置可调参数的值。
要显示所有VMM可调参数的当前值,可以运行带-L选项的vmo命令:
#vmo-L
要显示所选VMM可调参数的当前值,可以使用-L选项以列出可调参数的名称。
例如,下面的命令快照显示了列出minperm%、maxperm%、maxclient%和lru_file_repage可调参数当前值时的输出(请参见清单3):
清单3.可调参数
#vmo-Lminperm%-Lmaxperm%-Lmaxclient%-Llru_file_repage
NAMECURDEFBOOTMINMAXUNITTYPE
DEPENDENCIES
--------------------------------------------------------------------------------
lru_file_repage11101booleanD
--------------------------------------------------------------------------------
maxclient%8080801100%memoryD
maxperm%
minperm%
--------------------------------------------------------------------------------
maxperm%8080801100%memoryD
minperm%
maxclient%
--------------------------------------------------------------------------------
minperm%2020201100%memoryD
maxperm%
maxclient%
VMMTuningTip:
ProtectingComputationalMemory
ByBarryJ.SaadpSeriesAdvancedTechnicalSupport
ThisVMMtuningtipisapplicablepSeriesserversrunningAIX5.2ML4+orAIX5.3ML1+.
Thegoalofthenewtuningapproachistopreventorprotectcomputationalmemory(i.e.processmemory(data,stack,andheap),kernelmemoryandsharedmemory(e.g.,Oracle’sSystemGlobalArea(SGA))frombeingpaged-outtopagingspace.Undertheassumptionthatoncepaged-out,atsomepointinthefuture,thedatawillhavetobepaged-infrompagingspace,whichwouldnegativelyimpactsystemperformance.Protectingcomputationalmemoryisparticularlyimportantforapplicationsthatmaintaintheirowndatacache(e.g.,DB2andOracle).Theobjective,protectingcomputationalmemory,isachievedbysettingtheVMMparametersasfollows:
maxperm%=maxclient%=(Ahighvalue)
Ahighvaluepreventsthelrud1fromrunningunnecessarily,andifpossiblethevalueshouldbegreaterthannumclient%(reportedbyvmstat–v).Atypicalsettingis90%.
minperm%=(Alowvalue)
Alo