golang 使用pprof和go-torch做性能分析

本文介绍了如何使用Golang内置的pprof工具和Uber的go-torch进行性能分析,包括分析web服务的CPU和内存使用情况。通过访问特定URL获取profile信息,使用go tool pprof进行CPU分析,利用火焰图更直观地展示问题。文章详细阐述了各个分析步骤和常用命令,帮助开发者优化程序性能。
摘要由CSDN通过智能技术生成

软件开发过程中,项目上线并不是终点。上线后,还要对程序的取样分析运行情况,并重构现有的功能,让程序执行更高效更稳写。 golang的工具包内自带pprof功能,使找出程序中占内存和CPU较多的部分功能方便了不少。加上uber的火焰图,可视化显示,让我们在分析程序时更简单明了。pprof有两个包用来分析程序一个是net/http/pprof另一个是runtime/pprof,net/http/pprof只是对runtime/pprof包进行封装并用http暴露出来,如下图源码所示:

    使用net/http/pprof分析web服务

    pprof分析web项目,非常的简单只需要导入包即可。    _ "net/http/pprof"    编写一个小的web服务器

package main

import (
	"fmt"
	"math/rand"
	"net/http"
	_ "net/http/pprof"
	"time"
)

var Count int64 = 0

func main() {
	go calCount()

	http.HandleFunc("/test", test)
	http.HandleFunc("/data", handlerData)

	err := http.ListenAndServe(":9909", nil)
	if err != nil {
		panic(err)
	}
}

func handlerData(w http.ResponseWriter, r *http.Request) {
	qUrl := r.URL
	fmt.Println(qUrl)
	fibRev := Fib()
	var fib uint64
	for i := 0; i < 5000; i++ {
		fib = fibRev()
		fmt.Println("fib = ", fib)
	}
	str := RandomStr(RandomInt(100, 500))
	str = fmt.Sprintf("Fib = %d; String = %s", fib, str)
	w.Write([]byte(str))
}

func test(w http.ResponseWriter, r *http.Request) {
	fibRev := Fib()
	var fib uint64
	index := Count
	arr := make([]uint64, index)
	var i int64
	for ; i < index; i++ {
		fib = fibRev()
		arr[i] = fib
		fmt.Println("fib = ", fi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值