现象
oracle服务器一节点内存,一个月来持续升高,近一月上涨10%左右。
问题分析
OS内存使用情况
使用内存最大的10个进程如下,PID为279417占用最大的内存。
查询279417,发现是ogg相关进程。
发现ogg的extract进程占用了大量的虚拟内存。
extract进程的内存占用情况,占据了操作系统大量的内存。
VSZ是虚拟内存大小,这是linux给进程的内存大小,但是这并不一定意味着这个进程使用了所有的内存。例如,许多应用程序具有执行某些任务的功能,但可能在需要之前不会将它们加载到内存中。Linux利用了请求分页,它只在应用程序尝试使用页面时才将页面加载到内存中。VSZ大小已经考虑了所有这些页面,但这并不意味着它们已经加载到物理内存中。因此,VSZ大小通常不是一个进程正在使用多少内存的精确度量,而是一个进程在将其所有函数和库装入物理内存时可以使用的最大内存量和指示。
RSS是驻留集大小(Resident Set Size),这是进程当前加载其所有页面的内存大小。乍一看,RSS数字似乎是系统进程使用的实际物理内存量。然而,每个进程的共享库也会被计算进去,这使得报告的物理内存使用量不那么准确。
总的来说: EXTRACT启动时,会分配CACHESIZE大小的VM来缓存事务数据能够用来缓存事务数据的VM的大小,为PROCESS VM AVAIL FROM OS。当VM使用达到CACHESIZEMAX时,考虑将数据数据大于CACHEPAGEOUTSIZE的事务pageout入磁盘。 Oracle官方文档中描述CACHEMGR参数主要用于控制存放未提交事务的虚拟内存(virtual memory,指的swap/paging space空间)和临时磁盘空间。所有的数据存放在叫做global cache的虚拟内存池中,当数据库接收到commit/rollback之后这些cache里面的内容才会写到trail文件中。
通过CACHEMGR可以设置用来cache没有提交的数据的虚拟内存大小和临时空间。 Ogg未配置CACHEMGR相关参数。
CACHEMGR参数配置: 默认情况下OGG的temp disk在./dirtmp下面,如果磁盘空间不足或者性能影响时我们可以考虑使用CACHEMGR参数进行调整。 语法及各个选项的意义如下: CACHEMGR { [, CACHESIZE
] [, CACHEDIRECTORY
|选项|含义| |-|-|-| |CACHESIZE|EXTRACT进程可用的用于缓存未提交的事务数据的初始化分配的VM容量。通过CACHESIZE选项指定| |CACHEDIRECTORY|指定swap出来的文件的目录| |CACHEPAGEOUTSIZE|事务数据将被考虑来交换到硬盘的阀值。通过CACHEPAGEOUTSIZE选项控制| |CACHESIZEMAX|指定进行CACHEPAGEOUTSIZE时的阀值,超过该值进行长事务的PAGEOUT,低于该值停止PAGEOUT|
结论与建议
通过设置CACHEMGR CACHESIZE 可以来控制OGG进程的内存使用
本文由 mdnice 多平台发布