我們在Oracle Linux 8機器上安裝了oracle DB(19c)。當我們將我們的服務器與19c DB連接時,DB機器的記憶體開始增長。只要服務器處理負載和執行資料庫操作,記憶體就會不斷增長,幾個小時后,所有的記憶體都被用完了,再也沒有可用的記憶體了。我們有一些簡短的PS/SQL陳述句和存盤程序,在執行不同的CRUD、提交、回滾操作時被執行。我們做了一些研究,發現這個命令可以釋放記憶體,但這并不奏效。
sync; echo 3 > /proc/sys/vm/drop_cache
注意:我們在11g資料庫上發現了同樣的行為,所以這不是一個資料庫版本的具體問題,同時我們更換了DB機器,但是問題仍然存在。
附上我們的機器的截圖,記憶體被完全使用。任何幫助都將被高度贊賞。
uj5u.com熱心網友回復:
我很難說你是否真的有記憶體泄漏。很可能沒有。Oracle為每個連接生成了專門的行程。這個行程 "掛載 "共享記憶體區域。這就是為什么你看到如此巨大的記憶體分配。嘗試使用ps_mem.py這樣的工具,它可以更好地處理共享記憶體段。
Oracle DB有兩個與記憶體相關的引數SGA PGA,通常DB使用的記憶體不應該超過這兩個引數的定義之和。
只要執行vmstat,檢查你的服務器是否真的在交換記憶體。
uj5u.com熱心網友回復:
確保你正在關閉所有的資料庫會話,以及游標。你顯示的所有這些行程似乎都是專用的服務器行程,為每次登錄資料庫而打開。這就是為什么你一開始使用它,你的記憶體就會上升:每次登錄都需要它自己的專用記憶體,除了后臺服務器行程使用的記憶體。
參見此處以了解有關調整 Oracle 記憶體使用情況的資訊。
還需要注意的是,你的記憶體并沒有完全被100%使用。29.9%是最近使用的或保留在緩沖區中的,并準備在有需要時提供。如果它真的被使用了,那么已使用的值將是100%,你的交換使用量可能會高得多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324201.html
標籤:
