最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go 內存分配管理

 更新時間:2022年02月23日 15:52:17   作者:?編程技術  
這篇文章主要介紹了Go 內存分配管理,go 語言實際內存、虛擬內存怎么分配,延遲歸還是什么機制?本文結合監(jiān)控對內存管理進行了觀測,深入學習golang對于內存的管理機制,需要的朋友可以參考一下

一、問題引入

現(xiàn)象:在實際工作項目中,golang項目經(jīng)常內存報警,現(xiàn)象為在流量增大,或傳入很大文件的情況下算法worker內存降低到一定限度之后(100Mb左右),過一段時間才能內存才能自動恢復。

  • Go內存管理機制,Go自己本身會管理內存,釋放的內存不會立即歸還給操作系統(tǒng),在一定時間之后才會歸還給操作系統(tǒng),過早的釋放內存歸還給操作系統(tǒng)會降低性能。
  • 內存泄漏,Go調用CGO算法模塊時,導致了內存泄漏
  • 進程占用的內存過大導致進程掛掉,并釋放了內存,supervisor自動重啟了進程,內存曲線恢復正常

二、幾個基本概念

1.RSS,VSS解釋

對于RAM內存的使用,實際是os kernel來控制的。

  • RSS(Resident Set Size)表示該進程分配的占用RAM的內存大小,不包括交互分區(qū)內存,包括共享庫占用的內存,棧內存,堆內存
  • VSZ(Virtual Memory Size)表示該進程分配的虛擬內存大小,包括進程可以訪問的所有內存,包括交換分區(qū),共享內存

舉例說明RSS,VSS:

如果一個進程,程序的大小有 500K,鏈接的共享庫大小有 2500K,堆棧內存共有 200K,其中 100K 進入了交換分區(qū)。進程實際加載了共享庫中的 1000K 的內容,以及自己程序的中的 400K 的內容。請問 RSS 和 VSZ 應是多少?RSS: 400K + 1000K + 100K = 1500K VSZ: 500K + 2500K + 200K = 3200K

三、Go內存管理機制

1.Go runtime內存延遲歸還

Go是一種高級語言,自帶GC。內存的分配和回收都是自動的被垃圾回收器所執(zhí)行,當某個對象內存變成不可達狀態(tài)時(unreachable)。垃圾回收器則將其回收。

Go中空閑的內存,并不意味著立即歸還給操作系統(tǒng)??臻e的內存可以被重新利用。因此Go語言中,即使某些對象被釋放了,操作系統(tǒng)的內存使用并沒有下降。這是因為Go的內存管理器,將其標為free,并可以重新利用。

Go runtime不會立刻歸還內存給操作系統(tǒng),內存在大約5分鐘左右沒有被使用時,才會歸還給操作系統(tǒng)。

例如:在處理Http請求時讀取HttpBodyBytes.Buffer中,處理完HttpBody的內容之后,并不會立刻釋放內存給OS,而是將這些內存對下一個Http請求進行內存的復用。

編寫如下:簡單的http服務,并使用ab進行壓測可以驗證Go gc的延遲歸還內存給操作系統(tǒng):

func main() { ?
? ? http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) { ?
? ? ? ? fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) ?
? ? }) ?

? ? http.ListenAndServe(":8010", nil) ?

? ? fmt.Println("hello") ?
} ?

初始:

$ ps -p 563 -v ?
? PID TTY ? ? ?STAT ? TIME ?MAJFL ? TRS ? DRS ? RSS %MEM COMMAND ?
? 563 pts/19 ? SNl ? ?0:27 ? ? ?0 ?2100 359203 ?3480 ?0.1 ./http ?

壓測后:

ab -n 1000000 -c 1000 http://10.104.7.46:8010/bar
$ ps -p 563 -v ?
? PID TTY ? ? ?STAT ? TIME ?MAJFL ? TRS ? DRS ? RSS %MEM COMMAND ?
? 563 pts/19 ? SNl ? ?0:27 ? ? ?0 ?2100 359203 12908 ?0.1 ./http ?

 5min后:

$ ps -p 563 -v ?
? PID TTY ? ? ?STAT ? TIME ?MAJFL ? TRS ? DRS ? RSS %MEM COMMAND ?
? 563 pts/19 ? SNl ? ?0:27 ? ? ?0 ?2100 359203 4816 ?0.0 ./http ?

可以看到RSS由3480到12908在到4816,結合free -m可以看到內存一樣的變化,因此驗證了golang的內存管理的延遲歸還特性。

2.強制歸還內存

debug.FreeOSMemory()

該函數(shù)強制盡可能多的將內存歸還給操作系統(tǒng)。不推薦手動調用釋放內存,

FreeOSMemory

的操作在后臺進程runtime來負責執(zhí)行,定期歸還內存給操作系統(tǒng)。

到此這篇關于Go 內存分配管理的文章就介紹到這了,更多相關Go 內存管理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • go?語言爬蟲庫goquery的具體使用

    go?語言爬蟲庫goquery的具體使用

    GoQuery是專為Go語言設計的一個強大的HTML解析和查詢庫,本文主要介紹了go語言爬蟲庫goquery的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Golang搭建HTTP服務器

    Golang搭建HTTP服務器

    Golang是一種非常流行的編程語言,它的開發(fā)速度快,代碼運行效率高等特點非常適合做Web應用的開發(fā)。本文將介紹如何使用Golang搭建HTTP服務器,需要的朋友可以參考閱讀
    2023-04-04
  • Golang中文字符串截取函數(shù)實現(xiàn)原理

    Golang中文字符串截取函數(shù)實現(xiàn)原理

    在golang中可以通過切片截取一個數(shù)組或字符串,但是當截取的字符串是中文時,可能會出現(xiàn)問題,下面我們來自定義個函數(shù)解決Golang中文字符串截取問題
    2018-03-03
  • Golang 之區(qū)分類型別名與類型定義的方法

    Golang 之區(qū)分類型別名與類型定義的方法

    這篇文章主要介紹了Golang 之區(qū)分類型別名與類型定義的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Go語言之Goroutine與信道異常處理

    Go語言之Goroutine與信道異常處理

    這篇文章主要給大家介紹得是Go語言Goroutine與信道異常處理,Goroutine 之間通信是通過 channel 通信的,想詳細了解得小伙伴跟小編一起來學習下面文章內容吧
    2021-10-10
  • go語言實現(xiàn)順序存儲的棧

    go語言實現(xiàn)順序存儲的棧

    這篇文章主要介紹了go語言實現(xiàn)順序存儲的棧,實例分析了Go語言實現(xiàn)順序存儲的棧的原理與各種常見的操作技巧,需要的朋友可以參考下
    2015-03-03
  • 詳解Golang中Context的三個常見應用場景

    詳解Golang中Context的三個常見應用場景

    Golang?context主要用于定義超時取消,取消后續(xù)操作,在不同操作中傳遞值。本文通過簡單易懂的示例進行說明,感興趣的可以了解一下
    2022-12-12
  • MacOS下本地golang環(huán)境搭建詳細教程

    MacOS下本地golang環(huán)境搭建詳細教程

    這篇文章主要介紹了MacOS下本地golang環(huán)境搭建詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Go?語言前綴樹實現(xiàn)敏感詞檢測

    Go?語言前綴樹實現(xiàn)敏感詞檢測

    這篇文章主要為大家介紹了Go語言前綴樹實現(xiàn)敏感詞檢測實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • GO語言Defer用法實例分析

    GO語言Defer用法實例分析

    這篇文章主要介紹了GO語言Defer用法,實例分析了Defer的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論

深水埗区| 北碚区| 郯城县| 乡宁县| 临江市| 郎溪县| 五峰| 平远县| 邢台市| 五莲县| 云南省| 盘锦市| 图们市| 兰考县| 德化县| 大余县| 买车| 建水县| 高淳县| 康定县| 麦盖提县| 红河县| 手游| 福泉市| 漯河市| 德保县| 屏山县| 综艺| 张家川| 卢氏县| 翁源县| 烟台市| 汤原县| 来凤县| 马山县| 门源| 禄劝| 临汾市| 柏乡县| 杂多县| 清丰县|