記憶體溢位:
記憶體溢位
(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...