記憶體和棧溢位問題定位

2021-10-10 01:44:10 字數 543 閱讀 1866

記憶體使用率在90%以上,通過監控工具apm檢視到一台虛擬機器上應用頻繁在發生了全域性gc(fullgc),導致應用假死,不在接受請求。此時登入虛擬機器

使用mat分析dump檔案

參考資料:

現象:乙個後端服務,每天都出現程序死掉。並且部署了該應用的後端服務都發生過程序死掉,通過監控apm發現,每次程序掛掉時間都是凌晨2點。

分析:每台伺服器都發生過,且發生時間都是凌晨2點,說明程序死掉和虛擬機器關係不大,有可能是定時任務。檢視/var/log/message系統日誌,除了看到程序掛掉時間,沒有其他有用日誌。

問題定位:ulimit 它是一種簡單並且有效的實現資源限制的方式,修改ulimit值為無限大,用於問題定位。第二天,程序又出現掛掉,檢視/var/log/message系統日誌,看到裡面出現stack over flow即棧溢位,結合發生時間,基本可以確定是定時任務導致。當時定時任務在進行資料歸檔,根據最近幾天歸檔的資料發現都是歸檔完成第42條資料後,程序死掉。應該是第43條資料歸檔出現了問題,模擬現網環境資料,本地執行出現了stack over flow,發現是乙個遞迴函式無法退出導致。

棧溢位問題分析

近日,程式總是莫名其妙的coredump,而且還是在變數定義的時候 如 int a 1 百思不得其解。在這種情況下,只有幾種情況可能出現 記憶體踩踏 棧溢位。在經過長時間的分析確認,肯定不是記憶體踩踏。剩下的就是棧溢位了。linux下一般單個程式棧大小為10m,可用ulimit s查閱。一般情況下,...

tensorflow記憶體溢位問題

tensorflow的靜態圖結構簡潔清晰,符合人的思維。雖然程式設計上略微有些複雜,但是原理很容易看懂。tensorflow分建圖過程和執行圖 張量求值 兩個階段,在這兩個階段中都可以定義操作和張量。但是有乙個非常容易犯的錯誤 把操作定義在迴圈裡面。例如下面這個例子,tf.assign操作放在了迴圈...

opencv 記憶體溢位問題

問題 1 iplimage imglp cvcreateimage cvgetsize ilipsrc ilipsrc depth,ilipsrc nchannels imglp ct.rgb2cnorm ilipsrc 這時,在rgb2cnorm函式中的返回值如果還cvcreateimage的話,...