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

Go語言之使用pprof工具查找goroutine(協(xié)程)泄漏

 更新時間:2024年01月19日 09:37:40   作者:pengpengzhou  
這篇文章主要介紹了Go語言之使用pprof工具查找goroutine(協(xié)程)泄漏,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

用pprof工具查找goroutine(協(xié)程)泄漏

goroutine泄漏指的是goroutine啟動之后沒有退出導致goroutine的數(shù)量持續(xù)上升,或者是在實際應用中goroutine占用了很長時間才退出導致在一段時間內(nèi)goroutine的數(shù)量急劇上升。

通??梢圆捎肎o自帶的pprof工具來定位問題

如下面這個示例

這是一個簡單的HTTP服務,當接收到請求時另起一個goroutine來輸出日志,同時返回“Hello, World!\n”。

在記錄日志之前可能要處理一個耗時很長的業(yè)務邏輯,如通過公網(wǎng)請求第三方的API接口,這里為了簡化問題用time.Sleep來示意。

goroutineleak.go

package main
 
import (
	"io"
	"log"
	"net/http"
	_ "net/http/pprof"
	"time"
)
 
func writeLog(msg string) {
	go func() {
		time.Sleep(1 * time.Second)
		log.Println(msg)
	}()
}
func handler(w http.ResponseWriter, r *http.Request) {
	writeLog(r.URL.RequestURI())
	io.WriteString(w, "Hello, world!\n")
}
 
func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8080", nil)
}

利用Grinder來壓測,開8個進程,每個進程開3個線程,同時請求上述服務。

在請求過程中,通過瀏覽器查看http://pub.pengpengzhou.com:8080/debug/pprof/goroutine?debug=1, 域名是上述服務所在的地址。

從pprof的返回結(jié)果中,我們可以看到協(xié)程總數(shù)是5605,下面列出了5組產(chǎn)生協(xié)程的代碼stack trace,按產(chǎn)生的協(xié)程數(shù)量倒排序。

可以看到第一組產(chǎn)生了5597個協(xié)程,產(chǎn)生位置在goroutineleak.go的13行“time.Sleep(1 * time.Second)”對應的函數(shù)是main.writeLog。

問題很快得到定位,把這一行注釋掉,重新再壓測,可以得到如下結(jié)果, 協(xié)程總數(shù)一下就降到了8,泄漏的問題得到了解決。

當然,在實際應用中,耗時是不可避免的,通常是用設置超時的辦法來規(guī)避長時間等待。

總結(jié)

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

相關文章

  • Golang 如何限制木馬圖片上傳服務器的實例

    Golang 如何限制木馬圖片上傳服務器的實例

    本文主要介紹了Golang 如何限制木馬圖片上傳服務器的實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • golang實現(xiàn)ftp實時傳輸文件的案例

    golang實現(xiàn)ftp實時傳輸文件的案例

    這篇文章主要介紹了golang實現(xiàn)ftp實時傳輸文件的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang?實現(xiàn)Redis?協(xié)議解析器的解決方案

    Golang?實現(xiàn)Redis?協(xié)議解析器的解決方案

    這篇文章主要介紹了Golang???實現(xiàn)?Redis?協(xié)議解析器,本文將分別介紹Redis 通信協(xié)議 以及 協(xié)議解析器 的實現(xiàn),若您對協(xié)議有所了解可以直接閱讀協(xié)議解析器部分,需要的朋友可以參考下
    2022-10-10
  • 詳解golang開發(fā)中select多路選擇

    詳解golang開發(fā)中select多路選擇

    這篇文章主要介紹了golang開發(fā)中select多路選擇,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 一文帶你了解如何正確理解和使用Golang中nil

    一文帶你了解如何正確理解和使用Golang中nil

    在?Golang?中,nil?是一個預定義的標識符,在不同的上下文環(huán)境中有不同的含義,但通常表示“無”、“空”或“零值”,本文主要來帶大家了解下nil的正確使用,需要的可以參考下
    2023-12-12
  • golang bufio包中Write方法的深入講解

    golang bufio包中Write方法的深入講解

    這篇文章主要給大家介紹了關于golang bufio包中Write方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • GO語言實現(xiàn)TCP服務器的示例代碼

    GO語言實現(xiàn)TCP服務器的示例代碼

    這篇文章主要為大家詳細介紹了如何通過GO語言實現(xiàn)TCP服務器,文中的示例代碼講解詳細,對我們深入了解Go語言有一定的幫助,需要的可以參考一下
    2023-03-03
  • Go中數(shù)組傳參的幾種方式小結(jié)

    Go中數(shù)組傳參的幾種方式小結(jié)

    本文主要介紹了Go中數(shù)組傳參的幾種方式小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Go 語言范圍Range的實現(xiàn)示例

    Go 語言范圍Range的實現(xiàn)示例

    Go語言中,range是通過關鍵字range實現(xiàn)的,本文主要介紹了Go 語言范圍Range的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-01-01
  • GoLang中生成UUID唯一標識的實現(xiàn)

    GoLang中生成UUID唯一標識的實現(xiàn)

    這篇文章主要介紹了GoLang中生成UUID唯一標識的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論

留坝县| 黎平县| 宜君县| 连城县| 秦皇岛市| 咸丰县| 板桥市| 洪江市| 三原县| 大邑县| 钟山县| 陆河县| 湾仔区| 安泽县| 长沙市| 永寿县| 中卫市| 翼城县| 连山| 宁武县| 永嘉县| 双牌县| 桑日县| 阿克苏市| 张家川| 太白县| 闽侯县| 芜湖市| 汝阳县| 积石山| 小金县| 汕头市| 柳河县| 甘德县| 康定县| 化德县| 南江县| 卓资县| 揭阳市| 邢台市| 湘阴县|