应用服务器从源库中读取数据再导入到目标数据库,已经好几天执行失败了,从程序的日志中可以看到SQL30081N的错误,运程服务器已经中断连接,今天发现db2diag.log首次报出了OS级别的Error,SIGNALDANGER,网上说是page space不足了。经过学习aix的内存机制,写下心得:
Aix通过页来管理内存 VMM的职责
页映射物理地址,也映射虚拟内存
Page space(虚拟内存,交换空间)是用来存放暂时不需要CPU处理的数据的地方。安装系统时自动规定逻辑卷hd6存放page space。
先把页分2种,工作存储分页(逻辑数据,进程数据,堆栈,共享内存,内核数据)
进程要退出时释放掉
若被修改过,需要页交换时(为其他进程等让位置),放到page space
永久存储分页(文件数据,缓存在内存中的文件)
若被修改过,需要交换时,写入到文件系统中,若未修改,直接抛弃
永久存储分页
分为客户端client JFS2文件系统 现在文件系统都为JFS2了
非客户端 JFS 文件系统
以上是根据缓存的类型分出的页面淘汰方式
Aix有自己的页面类型标准如下:
计算型:comp ———————— 都是工作存储分页 工作存储分页也都是计算型的
非计算性(也被称为文件型)noncomp :正在进行读取 写入的文件数据
注:永久存储分页可以使计算型的,也可以是非计算型的
涉及到的查询系统性能命令
#lsps –a
#svmon 虚拟内存快照
#vmstat
#topas
可以发现如下关系 颜色相同为一样的:
# svmon -G
size inuse free pin virtual
memory 8388608(物理内存) 8162617 225991 666479 2540070
pg space 1048576 7317
work pers clnt other
pin(in use的子集,固定的) 236541 0 0 429938
in use 2539866(工作存储分页) 0 5622751(客户端分页数)
# lsps -a
Page Space Physical Volume Volume Group Size %Used Active Auto Type
hd6 hdisk0 rootvg 4096MB 1 yes yes lv
# vmstat
System Configuration: lcpu=8 mem=32768MB
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 1 2540111 226003 0 0 0 3 7 0 127 14803 1163 3 1 96 0
Avm含义是什么呢
官方解释:
Memory: information about the usage of virtual and real memory. Virtual pages are considered active if they have been accessed. A page is 4096 bytes.
avm Active virtual pages.
fre Size of the free list. Note: A large portion of real memory is utilized as a cache for file system data. It is not unusual for the size of the free list to remain small.
系统中avm大约9.6G,9.6G怎么来的呢?avm 列显示了访问的所有虚拟内存,即使它没有被调出。该页映射到了memory,同时也映射到了page space。所以它比4G还大。
从# vmstat –v中也看出
71.1 numperm percentage非计算性分页的数目占得挺高
71.1 numclient percentage
5612632 client pages
参考资料:http://www.ibm.com/developerworks/cn/aix/library/au-cn-pagingspace/
参考资料中命令topas有介绍noncomp使用率的问题
总结下:系统中文件内存还是偏大的,从topas中可以看出,性能分析命令也可以看得出来,aix系统认为内存闲着也没用,当缓存使吧,程序中断后,也没释放,下次再导入数据时aix不会那么傻吧,除了必要的页换到pagespace,为了更大的内存,应该会抛弃不必要的页吧,现在打算增大pagespace,去看看程序运行如何。