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

Golang程序如何查找內(nèi)存泄漏(pprof)

 更新時(shí)間:2024年12月20日 10:52:58   作者:守望先鋒第一亞索  
該文章詳細(xì)介紹了如何使用Golang的pprof工具查找內(nèi)存泄漏,首先,在main包中引入pprof包并設(shè)置條件編譯,然后編譯程序并運(yùn)行,通過(guò)執(zhí)行g(shù)otoolpprof-inuse_space命令,可以進(jìn)入交互模式并使用top命令查看內(nèi)存分配最多的函數(shù),如果本機(jī)中有源代碼

Golang程序查找內(nèi)存泄漏

1. 在main包中

選擇在一個(gè)單獨(dú)文件中加上pprof包引用并設(shè)置條件編譯,這樣不會(huì)與develop正式版本代碼產(chǎn)生任何耦合。

// +build debug

package main

import (
	"net/http"
	_ "net/http/pprof"
)

func init() {
	go http.ListenAndServe(":18080", nil)
}

2. 編譯

 go build -tags debug .

3. 在目標(biāo)機(jī)中運(yùn)行剛編譯出來(lái)的debug版本程序

本例中ip為隨意編寫(xiě)的。

4. 執(zhí)行

go tool pprof -inuse_space http://192.168.20.5:18080/debug/pprof/heap進(jìn)入交互模式:

[user@LAPTOP-LCP testtool]$ go tool pprof -inuse_space http://192.168.20.5:18080/debug/pprof/heap
Fetching profile over HTTP from http://192.168.20.5:18080/debug/pprof/heap
Saved profile in C:\Users\Noname\pprof\pprof.testtool.alloc_objects.alloc_space.inuse_objects.inuse_space.006.p
b.gz
File: testtool
Type: inuse_space
Time: Aug 16, 2022 at 2:24pm (CST)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof) top 10
Showing nodes accounting for 27831.78kB, 100% of 27831.78kB total
Showing top 10 nodes out of 35
flat flat% sum% cum cum%
11787.50kB 42.35% 42.35% 11787.50kB 42.35% runtime.allocm
9382.95kB 33.71% 76.07% 9382.95kB 33.71% io.ReadAll
2561.02kB 9.20% 85.27% 2561.02kB 9.20% runtime.malg
1536.21kB 5.52% 90.79% 1536.21kB 5.52% github.com/aws/aws-sdk-go/aws/endpoints.init
514kB 1.85% 92.63% 514kB 1.85% bufio.NewReaderSize
514kB 1.85% 94.48% 514kB 1.85% bufio.NewWriterSize
512.08kB 1.84% 96.32% 512.08kB 1.84% net/http.newTransferWriter
512.02kB 1.84% 98.16% 512.02kB 1.84% runtime.gcBgMarkWorker
512kB 1.84% 100% 512kB 1.84% runtime.doaddtimer
0 0% 100% 9382.95kB 33.71% io/ioutil.ReadAll
(pprof)
(pprof)

交互界面使用top命令查看內(nèi)存分配最多的函數(shù)。

如果本機(jī)中有源代碼,可以使用list命令查看源代碼中哪一行分配的函數(shù)最多。

(pprof)
(pprof) list io.ReadAll
Total: 27.18MB
ROUTINE ======================== io.ReadAll in C:\Program Files\Go\src\io\io.go
9.16MB 9.16MB (flat, cum) 33.71% of Total
. . 626:func ReadAll(r Reader) ([]byte, error) {
. . 627: b := make([]byte, 0, 512)
. . 628: for {
. . 629: if len(b) == cap(b) {
. . 630: // Add more capacity (let append pick how much).
9.16MB 9.16MB 631: b = append(b, 0)[:len(b)]
. . 632: }
. . 633: n, err := r.Read(b[len(b):cap(b)])
. . 634: b = b[:len(b)+n]
. . 635: if err != nil {
. . 636: if err == EOF {
(pprof)
(pprof)

5. 也可以使用以下命令直接導(dǎo)出調(diào)用圖

非常直觀(guān)(需要安裝Graphviz,詳詢(xún)Download | Graphviz

go tool pprof -inuse_space -png http://192.168.20.5:18080/debug/pprof/heap > heap.png

可以在圖片中直觀(guān)地看到,調(diào)用過(guò)程中每個(gè)函數(shù)的內(nèi)存使用占比。

出現(xiàn)內(nèi)存泄漏時(shí),如果只查看一次很難確定真正出現(xiàn)內(nèi)存泄露的代碼位置,可以在程序運(yùn)行一段時(shí)間后,程序出現(xiàn)內(nèi)存泄露已經(jīng)很明顯后,再次查看內(nèi)存占用分析圖,找到兩張圖中內(nèi)存占用比例相差最大的函數(shù)。

總結(jié)

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

相關(guān)文章

  • Go字符串查找的20種實(shí)現(xiàn)方式

    Go字符串查找的20種實(shí)現(xiàn)方式

    本文總結(jié)了Go語(yǔ)言中20種字符串查找方法,從標(biāo)準(zhǔn)庫(kù)API到經(jīng)典高效算法,再到數(shù)據(jù)結(jié)構(gòu)輔助和高級(jí)技巧,覆蓋了從單次查找、多個(gè)模式查找、前綴查詢(xún)到模糊匹配等場(chǎng)景,每種方法都有其適用場(chǎng)景和時(shí)間空間復(fù)雜度,并提供了詳細(xì)的應(yīng)用建議,需要的朋友可以參考下
    2026-05-05
  • 詳解Go 創(chuàng)建命令行工具的方法

    詳解Go 創(chuàng)建命令行工具的方法

    這篇文章主要介紹了詳解Go 創(chuàng)建命令行工具,需要的朋友可以參考下
    2020-12-12
  • Golang程序中使用Prometheus的client_golang庫(kù)

    Golang程序中使用Prometheus的client_golang庫(kù)

    這篇文章主要介紹了Golang程序中使用Prometheus的client_golang庫(kù),Prometheus 是一個(gè)開(kāi)源的監(jiān)控和警報(bào)工具包,用于收集和處理應(yīng)用程序和系統(tǒng)的指標(biāo)數(shù)據(jù)。Prometheus 提供了多種客戶(hù)端庫(kù),可以輕松地集成到各種編程語(yǔ)言中
    2023-04-04
  • go語(yǔ)言實(shí)現(xiàn)短信發(fā)送實(shí)例探究

    go語(yǔ)言實(shí)現(xiàn)短信發(fā)送實(shí)例探究

    這篇文章主要為大家介紹了go語(yǔ)言實(shí)現(xiàn)短信發(fā)送實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • go panic時(shí)如何讓函數(shù)返回?cái)?shù)據(jù)?

    go panic時(shí)如何讓函數(shù)返回?cái)?shù)據(jù)?

    今天小編就為大家分享一篇關(guān)于go panic時(shí)如何讓函數(shù)返回?cái)?shù)據(jù)?,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • Go?net?http超時(shí)應(yīng)用場(chǎng)景全面詳解

    Go?net?http超時(shí)應(yīng)用場(chǎng)景全面詳解

    HTTP是一個(gè)復(fù)雜的多階段協(xié)議,因此沒(méi)有一個(gè)一刀切的超時(shí)解決方案,在這篇文章中,我將分解您可能需要應(yīng)用超時(shí)的各個(gè)階段,并研究在服務(wù)器端和客戶(hù)端上執(zhí)行超時(shí)的不同方法
    2024-01-01
  • Golang基礎(chǔ)教程之字符串string實(shí)例詳解

    Golang基礎(chǔ)教程之字符串string實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Golang基礎(chǔ)教程之字符串string的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • golang中使用proto3協(xié)議導(dǎo)致的空值字段不顯示的問(wèn)題處理方案

    golang中使用proto3協(xié)議導(dǎo)致的空值字段不顯示的問(wèn)題處理方案

    這篇文章主要介紹了golang中使用proto3協(xié)議導(dǎo)致的空值字段不顯示的問(wèn)題處理方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 詳解Golang Iris框架的基本使用

    詳解Golang Iris框架的基本使用

    這篇文章主要介紹了Golang Iris框架的基本使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-11-11
  • golang切片初始化的使用示例

    golang切片初始化的使用示例

    Go語(yǔ)言中,切片可通過(guò)直接初始化、數(shù)組初始化、切片表達(dá)式等多種方法進(jìn)行初始化,這些方式提供了靈活的數(shù)據(jù)管理方式,適合不同的編程需求和場(chǎng)景,感興趣的可以了解一下
    2024-10-10

最新評(píng)論

乌兰察布市| 广水市| 锦屏县| 仪征市| 桑植县| 大方县| 晴隆县| 中方县| 平原县| 呼玛县| 元氏县| 元朗区| 彩票| 长阳| 滦南县| 措勤县| 丹寨县| 鹤壁市| 金湖县| 鸡泽县| 昭觉县| 鲁山县| 北京市| 全州县| 苏尼特左旗| 班玛县| 三穗县| 樟树市| 肃南| 乳山市| 高清| 梁平县| 舟山市| 海淀区| 茶陵县| 达尔| 巴中市| 霍林郭勒市| 莎车县| 五大连池市| 简阳市|