1、給系統壓力,內存占用增大,但停止打壓后,內存不能降低,則可能有內存泄漏。
2、top不能實時反映程序占用內存,因Go向系統申請內存不使用后,并不立即歸還系統。
3、程序占用系統內存、Go的堆內存、實際使用內存:從系統申請的內存會在Go的內存池管理,整塊的內存頁,長時間不被訪問并滿足一定條件后,才歸還給操作系統。又因為有GC,堆內存也不能代表內存占用,清理過之后剩下的,才是實際使用的內存。
在Go中發現內存泄露有2種方法,一個是通用的監控工具,另一個是go pprof:
監控工具:固定周期對進程的內存占用情況進行采樣,數據可視化后,根據內存占用走勢(持續上升),很容易發現是否發生內存泄露。
go pprof:適合沒有監控工具的情況,使用Go提供的pprof工具判斷是否發生內存泄露。
監控工具查看進程內在占用情況
如果使用云平臺部署Go程序,云平臺都提供了內存查看的工具,可以查看OS的內存占用情況和某個進程的內存占用情況,比如阿里云,我們在1個云主機上只部署了1個Go服務,所以OS的內存占用情況,基本是也反映了進程內存占用情況,OS內存占用情況如下,可以看到隨著時間的推進,內存的占用率在不斷的提高,這是內存泄露的最明顯現象:
以上就是golang 內存泄露的原因的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。