1、給予系統壓力,記憶體佔用增加,但停止打壓後,記憶體無法降低,則可能有記憶體洩漏。 (建議學習:go)
2、top無法即時反映程式佔用內存,因Go向系統申請記憶體不使用後,並未立即歸還系統。
3、程式佔用系統記憶體、Go的堆記憶體、實際使用記憶體:從系統申請的記憶體會在Go的記憶體池管理,整塊的記憶體頁,長時間不被存取並滿足一定條件後,才歸還給作業系統。又因為有GC,堆記憶體也不能代表記憶體佔用,清理過之後剩下的,才是實際使用的記憶體。
在Go中發現記憶體外洩有2種方法,一個是通用的監控工具,另一個是go pprof:
監控工具:固定週期對進程的記憶體佔用情況進行取樣,資料視覺化後,根據記憶體佔用走勢(持續上升),很容易發現是否發生記憶體外洩。
go pprof:適合沒有監控工具的情況,使用Go提供的pprof工具判斷是否發生記憶體外洩。
監控工具查看進程內在佔用情況
如果使用雲端平台部署Go程序,雲端平台都提供了記憶體查看的工具,可以查看OS的記憶體佔用情況和某個進程的記憶體佔用情況,例如阿里雲,我們在1個雲主機上只部署了1個Go服務,所以OS的記憶體佔用情況,基本上也反映了進程記憶體佔用情況,OS記憶體佔用情況如下,可以看到隨著時間的推進,記憶體的佔用率不斷的提高,這是記憶體外洩最明顯的現象:
以上是golang 記憶體外洩的原因的詳細內容。更多資訊請關注PHP中文網其他相關文章!