AIX虚拟内存管理机制
AIX采用了基于分页的虚拟内存机制。页面一般都是统一大小的(默认页面大小4k,当然也可以启用大页面内存支持,POWER5 芯片支持四种虚拟内存页面的大小:4KB、64KB、16MB 和 16GB),这样可以简化整个的管理算法。页面是基于整个虚拟内存地址空间分割的,一个页面最终可能映射到物理内存,也可能映射到磁盘的交换区(paging space)上。很明显,内存中的页面访问速度要快得多,但是内存大小有限,某些页面将不得不被挤出内存。淘汰页面的算法一般都是基于LRU算法的,通过ps -k可以看到AIX有一个lrud的内核守护进程,就是AIX分页替换守护进程。
AIX将所有的内存页面分成两大类型:
- 工作存储分页(Working storage pages)
- 永久存储分页(Permanent storage pages)
工作存储分页的内容都是易失性的,在磁盘上没有对应的永久存储文件数据,诸如进程数据/堆栈/共享内存/内核数据等,都是这一类的。而永久存储分页其实就是文件数据。分成这两种类型,是因为从内存中淘汰页面时,需要做不同的处理。对于工作存储分页,只要释放掉对应的内存页面(其实就是修改某些标志位)就可以了。而永久存储分页,则需要判断是否有数据修改,没有修改的话,和工作存储分页的处理一样,直接标志回收即可,如果有修改,则需要将相应的修改数据写回磁盘。
而根据缓存的文件的不同,永久存储分页又分成两种,一种就是新的jfs2文件系统和NFS文件系统的文件缓存,叫做客户端分页(Client pages)。而原来老的jfs文件系统的文件缓存页面,就是非客户端页面(Non-client pages)。
上面对于分页的分类法,是根据缓存的数据类型,需要在淘汰时选择不同的处理方式。而AIX在选择哪些页面需要淘汰的时候,却是按照另外一种标准的。根据这个标准,可以将所有分页分成另外两种类型:
- 计算型分页(Computational pages)
- 非计算型分页(Non-computational pages)
首先,所有的工作存储分页都是计算型分页,也就是说,Oracle的PGA/SGA等都是属于计算型分页的。而永久存储分页,则根据缓存的文件的类型,如果是可执行文件,则对应的分页是计算型的,如果是数据文件,则是非计算型的,同一个文件对应的页面,要么全部是计算型,要么全部是非计算型的。显然的,为了提供Oracle等应用的性能,假如需要淘汰页面,优先应当交换非计算型页面。
解决xmanager无法启动AIX的CDE桌面一例
昨天在AIX上中安装oracle9i的时候,xmanager能连上服务器,也能登陆,但之后就一直停在starting CDE environment,桌面死活出不来。检查服务器,CDE是安装了的,执行/etc/rc.dt也能顺利启动,检查dtlogin也运行正常。
最后发现,问题出在/etc/hosts上,假设主机名为test,IP地址为192.168.168.1,/etc/hosts文件中存在如下记录
192.168.168.1 test1 test
也就是这个位于test之前的test1造成了问题,去掉后桌面正常出来了。还有一个小问题,在AIX上安装9i会要求指定JDK1.3.1的位置,大多数情况下,安装程序会在$ORACLE_BASE/jre上安装一个1.1.8和1.3.1的版本,但有时也可能碰到没有安装的情况,这时可以指定系统中其他版本的JDK,比如/usr/java14,系统中是否已经安装其他版本的jdk可以通过which java来查看。
记录一下备忘。
AIX上如何配置异步IO
AIX的异步IO需要bos.rte.aio文件集的支持
#lslpp -l bos.rte.aio
Fileset Level State Description
—————————————————————————-
Path: /usr/lib/objrepos
bos.rte.aio 5.3.0.62 COMMITTED Asynchronous I/O Extension
如何启用AIO
#mkdev -l aio0
aio0 Available
#chdev -P -l aio0 -a autoconfig=’available’
aio0 changed
[继续阅读全文]
流年不利,万事小心
昨天晚上下班的时候把手机落在公司了,没有手机担心系统有什么异常的话就收不到了,于是12点睡觉前又打开电脑去check一遍。果然有个库由于在大量导数据,空间快不够了。正在加datafile的过程中,另外一个AIX5305上的库又因为异步IO的问题宕机,alert记录如下:
Mon Feb 25 23:56:37 2008
Errors in file /u01/oracle/admin/ningoo/udump/ningoo_ora_577896.trc:
ORA-00202: controlfile: ‘/u01/oracle/oradata/ningoo/control01.ctl’
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
IBM AIX RISC System/6000 Error: 12: Not enough space
Additional information: 1
Mon Feb 25 23:56:38 2008
Errors in file /u01/oracle/admin/ningoo/bdump/ningoo_ckpt_712718.trc:
ORA-00206: error in writing (block 3, # blocks 1) of controlfile
ORA-00202: controlfile: ‘/u01/oracle/oradata/ningoo/control02.ctl’
ORA-27070: skgfdisp: async read/write failed
IBM AIX RISC System/6000 Error: 12: Not enough space
ORA-00206: error in writing (block 3, # blocks 1) of controlfile
ORA-00202: controlfile: ‘/u01/oracle/oradata/ningoo/control01.ctl’
ORA-27070: skgfdisp: async read/write failed
IBM AIX RISC System/6000 Error: 12: Not enough space
Mon Feb 25 23:56:38 2008
CKPT: terminating instance due to error 221
Instance terminated by CKPT, pid = 712718
