本文转载自:http://blog.itpub.net/8242091/viewspace-733599/
今天客户一个即将上线的数据库报告无法连接了,马上登录上去看,系统大量分页,77G内存的机器,交换分区利用率达到70%,还一直在增加
马上svmon -U看了下,发现ggs用户用了32GB内存,马上意识到ogg有问题,立马停掉。内存使用一下就降下来了
检查extract进程日志,lag延迟了2小时,检查生成的trail,发现最近2个小时生成的trail极多
尝试启动extract,发现主机内存马上就上去了。查看了长事务,发现还比较多。立马重新停掉
想到OGG的内存限制应该是操作系统用户内存限制
马上把ggs用户的内存限制设置为1GB,内存还是继续消耗的很快
尝试了128MB限制,尝试设置硬限制,还是没办法,内存吃的飞快。
最后查看文档,发现通过cachemgr可以设置用来cache没有提交的数据的虚拟内存大小和临时空间
虽然文档不建议设置,由系统自动管理。但是没办法,不设置内存吃的太快了
-- 未设置前:
CACHEMGR virtual memory values (may have been adjusted)
CACHESIZE: 64G
CACHEPAGEOUTSIZE (normal): 8M
PROCESS VM AVAIL FROM OS (min): 128G
CACHESIZEMAX (strict force to disk): 96G
-- 设置 CACHEMGR CACHESIZE 4GB
CACHEMGR virtual memory values (may have been adjusted)
CACHESIZE: 4G
CACHEPAGEOUTSIZE (normal): 8M
PROCESS VM AVAIL FROM OS (min): 8G
CACHESIZEMAX (strict force to disk): 6.91G
CACHESIZE:EXTRACT进程可用的用于缓存未提交的事务数据的初始化分配的VM容量。通过CACHESIZE选项指定
CACHEPAGEOUTSIZE:事务数据将被考虑来交换到硬盘的阀值。通过CACHEPAGEOUTSIZE选项控制
PROCESS VM AVAIL FROM OS:进程可以使用的VM的容量的近似值,默认比系统物理内存+交换分区容量略低,一般为CACHESIZE的两倍
CACHESIZEMAX:指定进行CACHEPAGEOUTSIZE时的阀值,超过该值进行长事务的PAGEOUT,低于该值停止PAGEOUT
总的来说:
EXTRACT启动时,会分配CACHESIZE大小的VM来缓存事务数据
能够用来缓存事务数据的VM的大小,为PROCESS VM AVAIL FROM OS
当VM使用达到CACHESIZEMAX时,考虑将数据数据大于CACHEPAGEOUTSIZE的事务pageout入磁盘
通过设置CACHEMGR CACHESIZE 可以来控制OGG进程的内存使用
通过send extract extxz, CACHEMGR CACHESTATS,可以看当前进程的vm使用量