記憶體溢位(OutOfMemoryError)

2021-07-28 00:17:55 字數 724 閱讀 3303

記憶體溢位:

記憶體溢位

(out of memory)就是

記憶體不夠,當所需要的記憶體超出分配的記憶體時,就會導致記憶體溢位。

比如下面的程式:

listlist=new arraylist();

while(true)

出現異常:

記憶體溢位在系統開發和測試

階段並不容易被發現,當系統正式上線一般時間後,操作的併發量上來了,資料也積累了一些,系統就容易出現記憶體溢位的現象,而此時系統又不能隨意停機或重啟,為修正

bug帶來很大的困難。

導致記憶體溢位的情況有如下幾種:

(1)記憶體中載入的資料量過於龐大,如一次從資料庫取出過多資料;

(2)集合類中有對物件的引用,使用後未進行清除,導致jvm不能將物件**;

(3)**中存在死迴圈或者在迴圈中產生過多的重複物件實體;

(4)jvm啟動引數設定過小導致;

(5)使用別人的軟體中的bug導致。

解決記憶體溢位的方法:

(1)對jvm的啟動引數進行修改,增加記憶體

(2)對錯誤日誌進行檢查,檢視「outofmemory」錯誤前是否有其它異常或錯誤

(3)程式設計人員需對**進行走查和分析,找出可能發生記憶體溢位的位置

(4)使用記憶體分析工具動態地檢視記憶體的使用情況,如jprofiler、jconsole等

在對記憶體溢位進行分析時,需要對jvm有一定的掌握。可參考以下鏈結,寫的比較詳細:

棧溢位,記憶體溢位

對於一台伺服器而言,每乙個使用者請求,都會產生乙個執行緒來處理這個請求,每乙個執行緒對應著乙個棧,棧會分配記憶體,此時如果請求過多,這時候記憶體不夠了,就會發生棧記憶體溢位。棧溢位是指不斷的呼叫方法,不斷的壓棧,最終超出了棧允許的棧深度,就會發生棧溢位,比如遞迴操作沒有終止,死迴圈。可以把記憶體比作...

linux 記憶體溢位排查 mysql記憶體溢位處理

業務場景 mysql 元件版本 mysql 5.7.25軟體架構 兩主兩從 01問題描述 mysql是乙個關係型資料庫管理系統,屬於oracle旗下產品。mysql是最流行的關係型資料庫管理系統之一,在web應用方面,mysql是最好的rdbms relational database manage...

mysql防止記憶體溢位 mysql記憶體溢位處理

主庫實列發生oom,例項程序由於占用記憶體達到linux系統的最大閾值,導致linux系統kill了mysql例項程序,可以通過如下方式檢視mysql使用了多少記憶體 檢視每個執行緒占用多少記憶體,然後乘以正在執行的執行緒 也就是排查sleep的 select read buffer size re...