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

Go 標(biāo)準(zhǔn)庫增加metrics指標(biāo)探討分析

 更新時(shí)間:2023年10月11日 14:19:54   作者:煎魚  
go中有一個(gè)神奇的標(biāo)準(zhǔn)庫 runtime/metrics,提供了一系列預(yù)定義好的 Go 自身的相關(guān)指標(biāo),如果沒有編寫過基礎(chǔ)監(jiān)控庫或者關(guān)注的比較少的朋友可能會(huì)沒接觸到這類指標(biāo),本文展開現(xiàn)有metrics 指標(biāo),并結(jié)合現(xiàn)有的社區(qū)討論一起看看還有沒有必要增加更多的標(biāo)準(zhǔn)庫指標(biāo)

快速了解 runtime/metrics

以下是一個(gè)快速 Demo。代碼如下:

func main() {
    descs := metrics.All()
    samples := make([]metrics.Sample, len(descs))
    for i := range samples {
        samples[i].Name = descs[i].Name
    }
    metrics.Read(samples)
    for _, sample := range samples {
        name, value := sample.Name, sample.Value
        switch value.Kind() {
        case metrics.KindUint64:
            fmt.Printf("%s: %d\n", name, value.Uint64())
        case metrics.KindFloat64:
            fmt.Printf("%s: %f\n", name, value.Float64())
        case metrics.KindFloat64Histogram:
            fmt.Printf("%s: %f\n", name, medianBucket(value.Float64Histogram()))
         ...
        }
    }
}
func medianBucket(h *metrics.Float64Histogram) float64 {
    total := uint64(0)
    for _, count := range h.Counts {
        total += count
    }
    thresh := total / 2
    total = 0
    for i, count := range h.Counts {
        total += count
        if total >= thresh {
            return h.Buckets[i]
        }
    }
    panic("should not happen")
}

輸出結(jié)果:

/cgo/go-to-c-calls:calls: 0
/cpu/classes/gc/mark/assist:cpu-seconds: 0.000000
/cpu/classes/gc/mark/dedicated:cpu-seconds: 0.000000
...
/gc/cycles/automatic:gc-cycles: 0
/gc/cycles/forced:gc-cycles: 0
/gc/cycles/total:gc-cycles: 0
/gc/gogc:percent: 100
/gc/gomemlimit:bytes: 9223372036854775807
/gc/heap/allocs-by-size:bytes: 8193.000000
/gc/heap/allocs:bytes: 56832
/gc/heap/allocs:objects: 6
/gc/heap/frees-by-size:bytes: 1.000000
/gc/heap/frees:bytes: 0
/gc/heap/frees:objects: 0
/gc/heap/goal:bytes: 4194304
...

里面包含了相當(dāng)多的 Go 系統(tǒng)指標(biāo)。完整的代碼運(yùn)行和輸出可以查看 https://go.dev/play/p/CKASbysqX9x。

我梳理了一張對(duì)照清單。其中 10 個(gè)指標(biāo)如下:

序號(hào)指標(biāo)含義
1/cgo/go-to-c-calls:calls當(dāng)前進(jìn)程從 Go 調(diào)用到 C 的次數(shù)
2/cpu/classes/gc/mark/assist:cpu-seconds預(yù)計(jì)執(zhí)行 GC 程序所花費(fèi)的 CPU 總時(shí)長,以協(xié)助 GC 并防止其落后于應(yīng)用程序
3/cpu/classes/gc/mark/dedicated:cpu-seconds在專門用于執(zhí)行 GC 任務(wù)的 CPU 處理器(根據(jù) GOMAXPROCS 的定義)上執(zhí)行 GC 任務(wù)預(yù)計(jì)需要花費(fèi)的 CPU 總時(shí)長
4/cpu/classes/gc/mark/idle:cpu-seconds在空閑 CPU 資源上執(zhí)行 GC 任務(wù)所花費(fèi)的 CPU 總時(shí)間
5/cpu/classes/gc/pause:cpu-secondsGC 暫停應(yīng)用程序預(yù)計(jì)所花費(fèi)的 CPU 總時(shí)長
6/gc/cycles/automatic:gc-cyclesGo Runtime 程序已完成的 GC 循環(huán)次數(shù)。
7/gc/gogc:percent用戶配置的堆大小目標(biāo)百分比
8/gc/heap/allocs:objects應(yīng)用程序觸發(fā)的堆分配累計(jì)計(jì)數(shù)
9/memory/classes/heap/free:bytesGo Runtime 對(duì)物理內(nèi)存的可用空間大小的預(yù)估(完全空閑并可返回底層系統(tǒng)但尚未返回的內(nèi)存)
10/sched/gomaxprocs:threads當(dāng)前 runtime.GOMAXPROCS 的值,或是可以同時(shí)執(zhí)行用戶級(jí) Go 代碼的操作系統(tǒng)線程數(shù)。

對(duì)于完整指標(biāo)有興趣的可以查看:

https://pkg.go.dev/runtime/metrics#hdr-Supported_metrics

更多的 metrics 指標(biāo)

最近在 Go 社區(qū)中有同學(xué)發(fā)起了一項(xiàng)討論《metrics for the standard library》,希望探討和在其他標(biāo)準(zhǔn)庫中添加更多的 metrics 指標(biāo),提供更多的可觀察性。

比較多同學(xué)期望的是網(wǎng)絡(luò)、延遲類的指標(biāo),針對(duì)性能、錯(cuò)誤等。如下幾種場景:

net/http 服務(wù)端:

  • 處理延遲。
  • 請(qǐng)求/響應(yīng)體大小。
  • 恐慌(panic)、恢復(fù)(recover)。
  • 錯(cuò)誤/警告(觸發(fā) net/http.Server.ErrorLog 的所有內(nèi)容)
  • 被拒絕的無效請(qǐng)求。

net/http 客戶端:

  • 調(diào)用延遲。
  • 請(qǐng)求/響應(yīng)體大小
  • 連接池相關(guān)。

database/sql 客戶端:

  • 查詢延遲。
  • 響應(yīng)大小。
  • 連接池相關(guān)。

net 網(wǎng)絡(luò)包相關(guān):

  • 例如 TCP、UDP 等,對(duì)應(yīng)的打開連接的數(shù)量、連接狀態(tài)(空閑、激活、關(guān)閉)、連接錯(cuò)誤等。
  • 例如 TLS,在握手階段相關(guān)的指標(biāo),握手持續(xù)時(shí)間、握手失敗計(jì)數(shù)等。

總結(jié)

整體上會(huì)發(fā)現(xiàn)大家對(duì)于 Go 標(biāo)準(zhǔn)庫的指標(biāo)訴求,更多的趨向于底層包。因?yàn)闊o論你用的是什么開源倉庫,其絕大部分都是基于上述提到的包。

在現(xiàn)階段,如果自己的 Go 業(yè)務(wù)應(yīng)用程序去記錄這些指標(biāo),就需要再封裝一層,每一個(gè)包,例如:ORM 就需要去實(shí)現(xiàn)一遍插件等。

而第三方庫實(shí)現(xiàn)不會(huì)把 metrics 這類非核心功能直接加入初始化實(shí)現(xiàn)中。因此官方標(biāo)準(zhǔn)庫對(duì) metrics 的支持是非常有必要的。

至少這樣就不用每個(gè)團(tuán)隊(duì)都搞一遍 net/http、database/sql 等的延遲調(diào)用指標(biāo)的配置和設(shè)置了。

以上就是Go 標(biāo)準(zhǔn)庫增加metrics指標(biāo)探討分析的詳細(xì)內(nèi)容,更多關(guān)于Go 標(biāo)準(zhǔn)庫metrics指標(biāo)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang中如何實(shí)現(xiàn)枚舉詳析

    Golang中如何實(shí)現(xiàn)枚舉詳析

    舉就是將數(shù)據(jù)值一一列出來,枚舉可以用來表示一些固定的值,枚舉是常量組成的,下面這篇文章主要給大家介紹了關(guān)于Golang中如何實(shí)現(xiàn)枚舉的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 探索Go語言中的switch高級(jí)用法

    探索Go語言中的switch高級(jí)用法

    在Go語言中,switch語句除了常見的用法外,還有一種不常用但有趣的寫法,這種寫法中,switch后面不跟任何表達(dá)式,而每個(gè)case后面跟的是返回bool類型的函數(shù)調(diào)用表達(dá)式,這實(shí)際上是一個(gè)等價(jià)于switch true的用法,通過從上到下逐一比較case后的表達(dá)式是否為true來決定執(zhí)行哪個(gè)分支
    2024-10-10
  • GO使用Mutex確保并發(fā)程序正確性詳解

    GO使用Mutex確保并發(fā)程序正確性詳解

    這篇文章主要為大家介紹了GO使用Mutex確保并發(fā)程序正確性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Go語言連接MySQL數(shù)據(jù)庫執(zhí)行基本的增刪改查

    Go語言連接MySQL數(shù)據(jù)庫執(zhí)行基本的增刪改查

    在后端開發(fā)中,MySQL?是最常用的關(guān)系型數(shù)據(jù)庫之一,本文主要為大家詳細(xì)介紹了如何使用?Go?連接?MySQL?數(shù)據(jù)庫并執(zhí)行基本的增刪改查吧
    2025-08-08
  • 使用Golang快速構(gòu)建出命令行應(yīng)用程序

    使用Golang快速構(gòu)建出命令行應(yīng)用程序

    在日常開發(fā)中,大家對(duì)命令行工具(CLI)想必特別熟悉了,如果說你不知道命令工具,那你可能是個(gè)假開發(fā)。每天都會(huì)使用大量的命令行工具,例如最常用的Git、Go、Docker等,這篇文章主要介紹了使用Golang快速構(gòu)建出命令行應(yīng)用程序,需要的朋友可以參考下
    2023-02-02
  • 使用Go語言實(shí)現(xiàn)HTTP客戶端請(qǐng)求并解析響應(yīng)的完整流程

    使用Go語言實(shí)現(xiàn)HTTP客戶端請(qǐng)求并解析響應(yīng)的完整流程

    在日常開發(fā)中,無論是調(diào)用 RESTful API、采集網(wǎng)頁數(shù)據(jù),還是進(jìn)行微服務(wù)之間的通信,HTTP 客戶端幾乎無處不在,本文聚焦于如何使用 Go 實(shí)現(xiàn)一個(gè) HTTP 客戶端,完成請(qǐng)求發(fā)送、響應(yīng)解析、錯(cuò)誤處理、Header與Body提取等完整流程,需要的朋友可以參考下
    2025-08-08
  • go語言語法基礎(chǔ)的全面梳理(適合入門)

    go語言語法基礎(chǔ)的全面梳理(適合入門)

    這篇文章主要介紹了go語言語法基礎(chǔ)的相關(guān)資料,從基礎(chǔ)語法到并發(fā)編程,涵蓋變量聲明、數(shù)據(jù)類型、流程控制、函數(shù)、接口、錯(cuò)誤處理及并發(fā)編程,全面覆蓋Go語言核心特性,需要的朋友可以參考下
    2026-06-06
  • Go語言非main包編譯為靜態(tài)庫并使用的示例代碼

    Go語言非main包編譯為靜態(tài)庫并使用的示例代碼

    本文以Windows為例,介紹一下如何將Go的非main包編譯為靜態(tài)庫,用戶又將如何使用。通過實(shí)際項(xiàng)目創(chuàng)建常規(guī)工程,通過示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-07-07
  • Golang實(shí)現(xiàn)單元測試中的邏輯層

    Golang實(shí)現(xiàn)單元測試中的邏輯層

    前面我們完成了最麻煩的數(shù)據(jù)層的單元測試,今天我們來看看單元測試中最容易做的一層,數(shù)據(jù)邏輯層,也就是我們通常說的 service 或者 biz 等
    2023-03-03
  • Go語言中實(shí)現(xiàn)多線程定時(shí)任務(wù)的示例代碼

    Go語言中實(shí)現(xiàn)多線程定時(shí)任務(wù)的示例代碼

    本文主要介紹了Go語言中實(shí)現(xiàn)多線程定時(shí)任務(wù)的示例代碼,使用goroutine和channel實(shí)現(xiàn)輕量級(jí)線程及通信,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09

最新評(píng)論

衢州市| 大城县| 南投县| 崇义县| 佛教| 太白县| 牙克石市| 深水埗区| 洪雅县| 迁安市| 巴东县| 澜沧| 信丰县| 康马县| 静乐县| 增城市| 玛曲县| 义乌市| 开化县| 汝南县| 南阳市| 丽水市| 长岛县| 芮城县| 太白县| 武宣县| 白水县| 吉隆县| 襄城县| 博客| 潞西市| 防城港市| 沂南县| 津市市| 唐山市| 吉木萨尔县| 惠州市| 新巴尔虎左旗| 旬阳县| 淳安县| 福泉市|