golang runtime pprof 和 http pprof有啥區(qū)別
pprof
?是 Go 語言標準庫中的一個性能分析工具,它允許你收集和分析程序在運行時的性能數(shù)據(jù),幫助你找出性能瓶頸和優(yōu)化機會。pprof
?支持多種分析方式,其中包括 runtime pprof 和 http pprof。
Runtime pprof:?
runtime/pprof
?包提供了與 Go 程序的運行時性能數(shù)據(jù)相關的函數(shù)。通過在代碼中導入這個包,你可以在程序運行時啟動性能分析器,然后在適當?shù)牡胤讲迦氩蓸狱c,以捕獲堆內存分配、CPU 使用情況、線程阻塞等數(shù)據(jù)。這些采樣數(shù)據(jù)可以被保存到文件中,然后通過 pprof 工具進行分析。HTTP pprof:?
net/http/pprof
?包則提供了一種通過 HTTP 服務暴露性能分析接口的方式。通過導入這個包,并將其注冊到你的 HTTP 路由器中,你可以通過瀏覽器訪問相應的 URL 來獲取性能分析數(shù)據(jù)。這種方式對于遠程監(jiān)控和分析來說非常方便,不需要直接訪問服務器的文件系統(tǒng)。
總的來說,區(qū)別在于數(shù)據(jù)的收集和訪問方式。Runtime pprof 在程序內部手動添加采樣點,將數(shù)據(jù)保存到文件中,然后用 pprof 工具分析;而 HTTP pprof 則通過 HTTP 接口暴露數(shù)據(jù),可以通過瀏覽器訪問。兩者可以根據(jù)需求和場景的不同來選擇使用。
舉例說明
當使用 Go 語言的?pprof
?庫時,你可以選擇是在代碼中直接使用 runtime pprof,還是使用 http pprof 通過 HTTP 服務來獲取性能分析數(shù)據(jù)。下面我將為你舉例說明這兩種情況。
1. Runtime pprof 舉例:
在這個例子中,我們導入了?runtime/pprof
?包并使用?StartCPUProfile
?開始 CPU 采樣,然后在代碼中進行一些計算。最后,我們使用?StopCPUProfile
?停止采樣,并將 CPU 采樣數(shù)據(jù)保存到文件中。同樣,我們還使用?WriteHeapProfile
?將堆內存分配數(shù)據(jù)保存到文件中。
2. HTTP pprof 舉例:
在這個例子中,我們導入了?_ "net/http/pprof"
?來注冊 http pprof 的路由。然后,我們在一個 goroutine 中不斷分配內存,模擬一個可能的內存泄漏。最后,我們使用?http.ListenAndServe
?啟動一個 HTTP 服務器,該服務器會暴露 pprof 接口。
你可以在瀏覽器中訪問?http://localhost:8080/debug/pprof/
?來查看和分析性能數(shù)據(jù),比如 CPU、內存等信息。
原文鏈接:https://duoke360.com/post/5860