摘要:本文作者根据自己多年的AIX5L系统管理的经验,从日常使用和管理角度出发,深入浅出但又较为系统论述了AIX5L操作系统内存调度机制,并对以往资料很少提及pagespace和文件内存的使用也做了重点剖析。本文对于AIX系统管理人员和AIX平台上的应用开发人员了解和深入掌握AIX系统均有较大帮助。
关键词: 内存(memory) 页面空间/内存(pagespace) maxclinet
内存替换(steal)内存暂存(pin) maxperm
作为使用最成熟和广泛的商用UNIX操作系统之一,AIX其内存的管理调度机制和其他如Linux、HP-UX都有所不同,有其独特之处。而如不对此有深刻了解,将会对其日常管理的各类内存现象产生困惑和不解,如为什么空余的内存总是非常少,为什么pagespace总是降不下来等等。深入剖析AIX的内存调度机制,了解其特点,对我们日常管理AIX,通过各类命令调整内存调度,最终使得系统最大限度利用资源、持久稳定运行都能有所帮助。
AIX的整个内存按管理初步分为4类,1为虚存(vm),是所有进程申请内存的总和;2为活动虚存(avm),为目前所有进程使用内存总和;3为实存,为系统物理配置的内存,又分为计算内存、文件内存(供文件读写)和空余内存(free);4为页面内存(pagespace),为系统扩展到硬盘上的内存,类似其他UNIX系统的交换(swap)空间,但机制又有所不同。
1虚存是目前所有进程理论上的内存总和,可用ps -ef的所有进程的SIZE和TSIZE简单相加,予以接近,实际意义不大;
2活动虚存为3物理内存的计算内存和4页面内存的实际使用部分之和,可用vmstat的avm看到,理想状态为小于实存,否则就可能会产生内存调进调出。
3实存就是我们常说的机器内存大小,用topas,prtconf,svmon等都可以看到;由于AIX的管理思想为尽量多使用内存,只要进程没有退出就不会释放,所以平时看到的空余内存(free)非常小,但并不表示内存不够使用。
4页面内存的使用情况可观察到内存最高峰的情况,且为内存使用的最后领地,页面内存满了将直接导致系统不再接受新的进程,如超过npskill阀值将进行kill调度。
内存替换及调度的最小单位为4KB,从vmstat,svmon均按此单位。
此外从页面替换的角度看,实存又分为暂存内存(pin)和可替换内存;对于系统内核和被频繁使用的部分内存,系统将标记为pin,不参与页面替换。可用svmon –G观察。
对于计算内存和文件内存,可用topas简单直观的看到。
我们可以从一个程序开始运行变为进程后退出的整个过程来充分理解AIX的内存分配机制:
1. 开始运行
开始运行时,AIX有一系列动作要完成,如申请PID等等,这里只对内存的变化作一简单论述。开始就会有两个部分产生,共享内存(对于oracle进程,这是主要部分)和私有内存,又各自分为工作段、文本段等内存段(内存段具体可参见资料《AIX5L V5.2命令参考大全,卷5》的svmon部分)。总之在程序真正运行之前,就会耗掉一部分内存存放代码、文件等信息,当然这部分对内存的消耗有限,我们假设空余空间(free)足够分配,方便下面剖析。
2. 申请内存
程序开始运行,需要申请内存存放数据,如果free空间足够,就直接分配;如果分配过程中少于minfree阀值,系统就会扫描内存,按预定的页面调度算法(具体可参见《AIX性能管理指南》内存页面替换算法),要么逐步替换(steal)文件内存,最终文件内存降到minperm阀值;要么产生页面调出(pageout),将其它进程的使用内存赶到pagespace里。最终满足内存申请,并保证free内存小于maxfee,大于minfree。
3. 使用
原则上频繁使用时,使用的内存将被暂存(pin),不受页面替换调度影响。但如此时使用不频繁而内存紧张,此时仍有可能被赶到pagespace里。
4. 释放内存
当程序使用内存结束,调用free()释放内存时,内存不会真正马上释放。但相应页面做有标记,在页面调度算法中将优先给其它进程替换。
5. 再次申请内存
当程序再次申请内存,一般上次申请的内存还未调出实存,如果本次申请小于上次,系统不再分配,只需使用,替换标记有所变化;当申请大小大于上次,则同样按申请原理分配增多部分。
6. 再次释放内存
同样,当程序使用内存结束,调用free()释放内存时,内存不会真正马上释放。但相应页面做有标记,在页面调度算法中将优先给其它进程替换。
7. 读写大的文件
当程序读写大的文件时,先检查文件内存里是否已有,有则使用,否则将占用文件内存,根据页面替换算法仍然可能发生pageout,将其它进程内存赶到pagespace。当文件内存超过maxperm时仍然还在读写,则挤掉其它文件或NFS的client内存。此外需要特别一提的是, NFS的client内存也是文件内存的一部分,由maxclinet控制阀值。
8. 休眠或等待
当程序释放内存后处于休眠等待等状态时,随着时间的推移,曾为其分配的内存将最有可能成为被替换的对象。
9. 退出
当进程正常退出或被kill掉时,其曾使用的数据和代码等内存将完全释放,包括pagespace部分,但文件内存保留。此时,free大小可能超过maxfee。
当然,实际系统调度时更为复杂,内存调度也主要受以下内存参数的约束,这里仅从我个人理解作一说明,详细解释可看相关资料:
minfree:当系统需要分配内存而free又小于此值,系统将调用页面替换,直到大于此值。,缺省120,即480KB。
maxfree:当系统页面调换时,发现free已大于此值,将停止。缺省128,即512KB。
minperm: 当系统的文件内存百分比小于此值,替换算法将同时替换文件页和计算页。缺省为20%。
maxperm: 当系统得文件内存大于此值,替换算法将只替换文件页。缺省为80%。
strict_maxperm:当设为1时,文件内存将绝对不会超过maxperm.缺省为0。
maxclient: 作为NFS的client使用的文件内存空间。缺省20%。
maxpin: 不受替换算法影响的暂存/锁定内存(pin)总数。
以上参数,AIX5.1及之前AIX4.3,可用/usr/samples/kernel/vmtune来调整,需要永久生效,须写入系统启动脚本。AIX5.2之后可用vmo,加-p即可成为永久生效。
从以上论述,我们就不难理解,为什么AIX里看内存的使用总是满满的,这是因为即使释放了内存,只要进程不退出,就不会真正变成free的,我们也就看不到这部分空余内存。这也是和Liunx等UNIX系统的明显区别所在。
对于AIX的Pagespace的使用,在AIX5.3以前,基本是系统自身来调控。我们设定当内存紧张时,接近minfree作为情形来做说明:
1. 发生内存申请:
如果文件内存在minperm和maxperm之间,将优先释放文件内存,也同时按替换算法将各个进程的内存部分调出到pagespace;当文件内存少于minperm,将优先将各个进程的内存部分调出。如调出部分以前没有调出过,这时将占用pagespace空间,此时pagespace使用比例增加;如占用部分以前就调出过,则检查变化,无变化就只标记,变化则更新,占用比例将不变。
2. 进程进行大的文件读写和NFS读写:
这时如果系统文件内存没到maxperm,且以前未读写过此文件,系统按替换算法同时减少其它文件所占内存和将其它进程的计算内存调出到pagespace ,我们可以看到文件内存占实存比例逐渐增加,pagespace也同样按上面原则,可能同时增加。
3. 占用大内存的进程退出。
当大进程退出时,我们可以看到实存的free值增加一大块,但pagespace却不一定有明显变化。这又有3种情况:
1) 大的文件读写结束时,文件内存减少,pagespace没有变化。当然随着时间的推移,其他进程调用时,pagespace内容回调,实存free会逐步减少,但pagespace内容仍保留。
2) 如果该进程运行不久就退出,从未被调出过,则pagespace也无变化。
3) 只有当该进程曾被调出过,pagespace将会减少曾调出的部分大小。
综上所述,我们就不难理解,AIX什么时候pagespace才能下降,即只有被调出过的占用pgespacce的进程退出时才会下降。当然,我也发现了一个办法,新开一个pagespace 空间,然后swapoff原来其中的一个,再swapon,这样来回关闭也会降下来,在AIX5.3前也是比较有效的办法。
令人欣喜的是,AIX5.3增加了对pagespace的管理,有了垃圾回收(garbage collection)的概念。并增加了一系列参数来调整pagespace的管理,限于篇幅,具体可man ioo,或参考AIX5.3的相关资料。对此我也曾做过试验,的确可以使得进程回调内存后,立刻释放pagespace的占用。
1. 文件系统mount成功:
文件系统装载(mount)时,实际有三个可能:
1) 使用文件内存,这时缺省方式,对于绝大多数类型文件系统适用。
2) 不使用文件内存,需要加dio参数,即直接读写。适用内存较少,或读写特殊的文件系统。笔者曾遇到hyperion essbase所在文件系统要用此参数,否则性能反而下降。该参数对文件系统日常备份的性能影响非常明显。
3) 是NFS的话,将使用client文件内存。
2. 进程使用该文件系统
当进程开始读写该文件系统上的文件,文件内存就开始使用,如果该文件第一次被读写,则进程将申请到一块文件内存,用作cache,速度较慢。
进程退出后,该内存仍不释放,以后再有进程读写,则使用,速度提高非常明显。
当内存紧张时,很久不用的文件内存将优先被释放。
3. 文件系统umount。
文件系统umount时,与其相关的文件内存将全部释放干净,这也是为什么大文件系统umount比较费时的原因。本来这部分内存本来即使没人使用也不会自动释放。
综上我们可以看到,如果内存宽裕,就无须调配minperm和maxperm,这样可以充分发挥文件内存的优势,提高I/O的性能。如果内存紧张,可调低maxperm,并strcit住,可空出一部分空间给进程使用。但不推荐调得太低,否则会造成性能下降,备份等读写量较大作业时间大大延长。
通过AIX5L的这些年的管理,也通过AIX学习认证,阅读实践相关书目,internet网上和同事间的交流,得到了以上对AIX系统内存调度的认识心得,也由于很难看到AIX资料较为全面的从管理角度分析这一问题,特撰此文。
1. IBM,《IBM Certification Study Guide -pSeries AIX System Administration》
2. IBM,《IBM Certification Study Guide -pSeries AIX System Support》
3. IBM,《IBM Certification Study Guide -AIX 5L Performance andSystem Tuning》
4. IBM,《AIX 5L Version 5.2Commands Reference》
5. IBM,《AIX 5L Version 5.2 Performance Management Guide》
6. IBM,《AIX 5L Version 5.2System Management Concepts: Operating System and Devices》
7. IBM,《AIX 5L Differences Guide Version 5.3Edition》
8. IBM,《AIX 5L Version 5.3Commands Reference》
9. IBM,《AIX 5L Version 5.3System Management Concepts: Operating System and Devices》
10. IBM,《AIX 5L Version 5.3 Performance Management Guide》
11. IBM,《Advanced POWER Virtualization on IBM System p5》
12. IBM,《AIX 5L Workload Manager (WLM) 》
13. IBM,《AIX 5L Performance Tools Handboo》
14. ChinaUnix BBS论坛
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞13
添加新评论24 条评论
2017-06-23 14:55
2016-12-26 23:02
2016-09-12 10:52
2015-12-02 14:34
2015-10-24 16:33
2015-10-24 16:30
2013-12-12 15:30
2013-11-06 21:43
2013-11-01 16:14
2013-10-25 17:03
2013-10-23 00:07
2013-10-16 09:22
2013-10-16 02:41
2013-10-15 21:08
2013-10-15 18:11
2013-10-15 12:40
2013-10-15 08:29
2013-10-14 09:20
2013-10-12 18:02
2013-10-10 23:48
2013-10-09 20:51
2013-10-09 20:39
2013-10-08 15:45
2013-09-25 08:12