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

Go net/http/pprof分析內(nèi)存泄露及解決過程

 更新時(shí)間:2025年04月15日 09:07:25   作者:rgc_520_zyl  
這篇文章主要介紹了Go net/http/pprof分析內(nèi)存泄露及解決過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

內(nèi)存泄露出現(xiàn)的原因

在go語(yǔ)言中,其自身實(shí)現(xiàn)了 GC(垃圾回收)機(jī)制, 所有出現(xiàn)內(nèi)存泄露的原因很大可能是 有些goroutine因?yàn)楦鞣N各樣的原因(如 channel阻塞或未設(shè)置close channel的功能)導(dǎo)致 垃圾回收機(jī)制 認(rèn)為這些goroutine還在正常運(yùn)行,無(wú)法被回收(每個(gè)goroutine至少占用2KB資源),長(zhǎng)時(shí)間處理大量請(qǐng)求后,導(dǎo)致內(nèi)存耗盡。

業(yè)務(wù)大致場(chǎng)景

go語(yǔ)言編寫的kong插件中,出現(xiàn)內(nèi)存泄露。

分析方法

嵌入如下代碼; 即使是在 go腳本中,通過如下代碼,也會(huì)生成一個(gè)pprof的http服務(wù),供web端分析使用。

import "github.com/Kong/go-pdk/server"
import _ "net/http/pprof"


// main 主入口函數(shù),啟動(dòng)go-pdk中的server
func main() {
	// 服務(wù)資源分析時(shí)使用
	go func() {
		err := http.ListenAndServe("0.0.0.0:6000", nil)
		if err != nil {
			panic("啟動(dòng)服務(wù)失敗")
		}
	}()

	err := server.StartServer(New, Version, Priority)
	if err != nil {
		panic(err)
	}
}

運(yùn)行服務(wù),并 查看 http://localhost:6000/debug/pprof/goroutine?debug=1 分析方式如下:

壓測(cè)請(qǐng)求此服務(wù); 對(duì)比發(fā)現(xiàn) 協(xié)程個(gè)數(shù)不斷增加的地方;從而找到內(nèi)存泄露點(diǎn);

具體原因

最終發(fā)現(xiàn) 是 鏈路追蹤的jaeger reporter(導(dǎo)出span數(shù)據(jù)到j(luò)aeger中)每次請(qǐng)求進(jìn)入都新建一個(gè)協(xié)程,導(dǎo)致內(nèi)存泄露

解決方法

通過 全局變量+ sync.Once 保證 只生成一個(gè) jaeger reporter;從而 不會(huì)生成多個(gè)協(xié)程,及 節(jié)約 網(wǎng)絡(luò)io資源。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • go sync Once實(shí)現(xiàn)原理示例解析

    go sync Once實(shí)現(xiàn)原理示例解析

    這篇文章主要為大家介紹了go sync Once實(shí)現(xiàn)原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Go設(shè)計(jì)模式之代理模式講解和代碼示例

    Go設(shè)計(jì)模式之代理模式講解和代碼示例

    這篇文章主要介紹了Go代理模式,代理是一種結(jié)構(gòu)型設(shè)計(jì)模式, 讓你能提供真實(shí)服務(wù)對(duì)象的替代品給客戶端使用,本文將對(duì)Go代理模式進(jìn)行講解以及代碼示例,需要的朋友可以參考下
    2023-07-07
  • Go從defer關(guān)鍵字到鎖用法實(shí)例demo

    Go從defer關(guān)鍵字到鎖用法實(shí)例demo

    在Go語(yǔ)言中,defer語(yǔ)句用于延遲執(zhí)行一個(gè)函數(shù)或方法,直到包含它的函數(shù)執(zhí)行完畢時(shí)才執(zhí)行,這篇文章主要介紹了Go從defer關(guān)鍵字到鎖用法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-06-06
  • 4個(gè)場(chǎng)景教會(huì)你Go中Goroutine和通道是怎么用的

    4個(gè)場(chǎng)景教會(huì)你Go中Goroutine和通道是怎么用的

    本篇給出了4個(gè)在運(yùn)維開發(fā)工作中較為常見的且也是比較典型的場(chǎng)景,通過這些場(chǎng)景來帶大家掌握Go中Goroutine和通道是怎么使用的,需要的可以學(xué)習(xí)一下
    2023-05-05
  • Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之二叉樹必會(huì)知識(shí)點(diǎn)總結(jié)

    Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之二叉樹必會(huì)知識(shí)點(diǎn)總結(jié)

    如果你是一個(gè)開發(fā)人員,或多或少對(duì)樹型結(jié)構(gòu)都有一定的認(rèn)識(shí)。二叉樹作為樹的一種,是一種重要的數(shù)據(jù)結(jié)構(gòu),也是面試官經(jīng)??嫉臇|西。本文為大家總結(jié)了一些二叉樹必會(huì)知識(shí)點(diǎn),需要的可以參考一下
    2022-08-08
  • 使用Go語(yǔ)言實(shí)現(xiàn)并發(fā)處理CSV文件到數(shù)據(jù)庫(kù)

    使用Go語(yǔ)言實(shí)現(xiàn)并發(fā)處理CSV文件到數(shù)據(jù)庫(kù)

    Go?語(yǔ)言的?goroutine?和通道(channel)非常適合用來并發(fā)地處理數(shù)據(jù),本文將通過簡(jiǎn)單示例介紹一下如何使用Go語(yǔ)言并發(fā)地處理?CSV?文件并將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中,感興趣的可以了解下
    2025-01-01
  • Linux操作系統(tǒng)上打包Go項(xiàng)目實(shí)現(xiàn)方式

    Linux操作系統(tǒng)上打包Go項(xiàng)目實(shí)現(xiàn)方式

    文章介紹了Go項(xiàng)目依賴打包的兩種方法:GoModules(管理依賴并確保一致性)和靜態(tài)鏈接(嵌入依賴生成獨(dú)立可執(zhí)行文件),需注意cgo配置及系統(tǒng)兼容性,推薦根據(jù)需求選擇合適方式
    2025-08-08
  • 一文帶你了解Golang中select的實(shí)現(xiàn)原理

    一文帶你了解Golang中select的實(shí)現(xiàn)原理

    select是go提供的一種跟并發(fā)相關(guān)的語(yǔ)法,非常有用。本文將介紹?Go?語(yǔ)言中的?select?的實(shí)現(xiàn)原理,包括?select?的結(jié)構(gòu)和常見問題、編譯期間的多種優(yōu)化以及運(yùn)行時(shí)的執(zhí)行過程
    2023-02-02
  • golang實(shí)踐-第三方包為私有庫(kù)的配置方案

    golang實(shí)踐-第三方包為私有庫(kù)的配置方案

    這篇文章主要介紹了golang實(shí)踐-第三方包為私有庫(kù)的配置方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 創(chuàng)建Go工程化項(xiàng)目布局詳解

    創(chuàng)建Go工程化項(xiàng)目布局詳解

    這篇文章主要介紹了創(chuàng)建Go工程化項(xiàng)目布局詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論

嘉祥县| 根河市| 宜州市| 平昌县| 宾川县| 上饶市| 无极县| 叙永县| 尤溪县| 大姚县| 临海市| 安康市| 宜都市| 怀来县| 孝感市| 时尚| 福贡县| 赤峰市| 海口市| 马公市| 莱芜市| 湄潭县| 阜康市| 彰武县| 孟州市| 旬邑县| 铁岭县| 于都县| 钦州市| 曲松县| 新源县| 青田县| 施甸县| 连山| 宜兴市| 东平县| 泰宁县| 光山县| 博爱县| 九江市| 桐庐县|