利用pprof测试go代码内存消耗性能,生成图形报告
和上一篇测试cpu差不多只是命令变了
命令:go tool pprof -http=127.0.0.1:8081 http://localhost:8080/debug/pprof/heap
上一篇测试cpu性能必须在测试命令期间,运行需要测试的接口才有效果
测试内存消耗的时候可以先运行完接口,再运行命令也能测试出内存消耗。也可以加个 -seconds 10 等待10s
下面是测试代码
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"net/http"
_ "net/http/pprof" // 这一行不能忘!!!!!!!!!!!!!!!!!!
)
func main() {
r := gin.Default()
r.GET("/consuming", func(c *gin.Context) {
consumeMemory()
consumeMemoryV2()
consumeMemoryV3()
c.String(http.StatusOK, "Memory consumption test completed.")
})
go func() {
log.Println(http.ListenAndServe(":8080", nil))
}()
_ = r.Run(":8000")
}
func consumeMemory() {
const size1 = 300000000 // 大约 3MB 的内存
var data []byte
for i := 0; i < size1; i++ {
data = append(data, 'a')
}
fmt.Println(" consumeMemory:Consumed memory:", len(data))
}
func consumeMemoryV2() {
const size2 = 100000000 // 大约 1MB 的内存
var data []byte
for i := 0; i < size2; i++ {
data = append(data, 'a')
}
fmt.Println("consumeMemoryV2:Consumed memory:", len(data))
}
func consumeMemoryV3() {
const size3 = 1 //
var data []byte
for i := 0; i < size3; i++ {
data = append(data, 'a')
}
fmt.Println("consumeMemoryV3:Consumed memory:", len(data))
}