現象
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
[, CACHEPAGEOUTSIZE
}
| 選項 | 含義 |
|---|---|
| CACHESIZE | EXTRACT進程可用的用于緩存未提交的事務數據的初始化分配的VM容量。通過CACHESIZE選項指定 |
| CACHEDIRECTORY | 指定swap出來的文件的目錄 |
| CACHEPAGEOUTSIZE | 事務數據將被考慮來交換到硬盤的閥值。通過CACHEPAGEOUTSIZE選項控制 |
| CACHESIZEMAX | 指定進行CACHEPAGEOUTSIZE時的閥值,超過該值進行長事務的PAGEOUT,低于該值停止PAGEOUT |
結論與建議
通過設置CACHEMGR CACHESIZE 可以來控制OGG進程的內存使用




