golang pprof 简单使用

项目结构

├── go.mod
├── go.sum
├── main.go

go.mod

module github.com/rongfengliang/gopsutillearning
?
go 1.13
?
require (
 github.com/shirou/gopsutil v2.19.11+incompatible
 github.com/stretchr/testify v1.4.0 // indirect
 golang.org/x/sys v0.0.0-20191224085550-c709ea063b76 // indirect
)
 

代码

package main
?
import (
 "fmt"
 "log"
 "net/http"
 _ "net/http/pprof"
?
 "github.com/shirou/gopsutil/mem"
)
?
func printinfo() {
 for {
  // fetch virtual mem info
  mem, err := mem.VirtualMemory()
  if err != nil {
   fmt.Println("some wrong", err)
  } else {
   fmt.Println((mem.String()))
  }
 }
}
func main() {
 go printinfo()
 log.Println(http.ListenAndServe("0.0.0.0:6060", nil))
}

pprof 使用

  • 启动
go run main.go

  • 基本命令
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
  • 效果

查看cpu 火焰图

  • 生成profile
    地址http://localhost:6060/debug/pprof/profile
  • 查看命令:
pprof -http 0.0.0.0:8080 profile
  • UI效果

  • 火焰图

makefile 构建

为了方便,使用make 构建跨平台的可执行文件

  • Makefile
build: clean compile
clean: 
 rm -rf pprof-demo-*
compile:
 echo "Compiling for every OS and Platform"
 GOOS=darwin GOARCH=amd64 go build -o pprof-demo-mac main.go
 GOOS=linux GOARCH=amd64 go build -o pprof-demo-linux main.go
 GOOS=windows GOARCH=amd64 go build -o pprof-demo-windows.exe main.go
  • 使用
make build

说明

golang 的pprof 功能强大,是把应用性能分析的利器,注意需要安装graphviz,结合自己的系统选择安装对应的版本

参考资料

https://golang.org/pkg/net/http/pprof/
https://github.com/google/pprof
https://github.com/rongfengliang/gopsutillearning
https://github.com/shirou/gopsutil

原文地址:https://www.cnblogs.com/rongfengliang/p/12107237.html

时间: 2024-11-12 11:02:46

golang pprof 简单使用的相关文章

使用Golang实现简单Ping过程

引言 关于各种语言实现Ping已经是大家喜闻乐见的事情了,网络上利用Golang实现Ping已经有比较详细的代码示例,但大多是仅仅是实现了Request过程,而对Response的回显内容并没有做接收.而Ping程序不仅仅是发送一个ICMP,更重要的是如何接收并进行统计. 下面是网络上几篇关于Ping的实现代码: https://github.com/paulstuart/ping/blob/master/ping.go http://blog.csdn.net/gophers/article/

golang pprof 性能分析工具

性能优化是个永恒的话题,而很多时候我们在作性能优化的时候,往往基于代码上面的直觉,把所有能想到的优化都优化了一遍,不错过任何小的优化点,结果整个代码的逻辑变得极其复杂,而性能上面并没有太大的提升.事实上,性能问题往往集中在某些小点,有时候很小的改动就能有巨大的提升,所以问题的关键是是怎么去找出这些优化点,幸运的是 golang 在设计的时候就考虑了这个问题,原生提供了性能分析的工具,可以很方便地帮我们找到性能瓶颈 pprof 简介 golang 的性能分析库在 runtime/pprof 里,主

Asp.net core与golang web简单对比测试

最近因为工作需要接触了go语言,又恰好asp.net core发布RC2,就想简单做个对比测试. 下面是测试环境: CPU:E3-1230 v2 内存:16G 电脑有点不给力 操作系统:Centos7.0(虚拟机) asp.net core rc2 golang v1.7beta1 下面是各自的代码: go package main import ( "fmt" "net/http" ) func main() { fmt.Println("This is

代码片段 - Golang 实现简单的 Web 服务器

------------------------------ 下面一段代码,实现了最简单的 Web 服务器: 编译环境: Linux Mint 18 Cinnamon 64-bit Golang 1.7 ------------------------------ // main.go package main import ( "fmt" "log" "net/http" ) // 处理主页请求 func index(w http.Respon

Go语言入门篇-gRPC基于golang & java简单实现

一.什么是RPC 1.简介: RPC:Remote Procedure Call,远程过程调用.简单来说就是两个进程之间的数据交互. 正常服务端的接口服务是提供给用户端(在Web开发中就是浏览器)或者自身调用的,也就是本地过程调用. 和本地过程调用相对的就是:假如两个服务端不在一个进程内怎么进行数据交互?使用RPC. 尤其是现在微服务的大量实践,服务与服务之间的调用不可避免,RPC更显得尤为重要. 2.原理: 计算机的世界中不管使用哪种技术,核心都是对数据的操作.RPC不过是将数据的操作垮了一个

golang rpc 简单范例

RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 它的工作流程如下图:   golang 使用 RPC的例子如下: 服务器端代码: 这里暴露了一个RPC接口,一个HTTP接口 package main import (     "fmt"     "io"     "net"     "net/http"  

Golang学习-第一篇 Golang的简单介绍及Windows环境下安装、部署

序言 这是本人博客园第一篇文章,写的不到位之处,希望各位看客们谅解. 本人一直从事.NET的开发工作,最近在学习Golang,所以想着之前学习的过程中都没怎么好好的将学习过程记录下来.深感惋惜! 现在将Golang的学习点滴记录分享,废话到此,下面进入正文. 注:此文及以后所有内容中的开发平台为:Windows 开发工具为:JetBrains Gogland x64版本 官方下载地址为:https://www.jetbrains.com/go/download/#section=windows

Golang pprof heap profile is empty

Q: When you use `go tool pprof` get heap data, profile is empty. A: The default sampling rate is 1 sample per 512KB of allocated memory. So If you application use little memory, the profiling can't sampling any data. You can change runtime.MemProfile

Golang 实现简单的滚动读取文本更新

这个小程序要实现的效果,简单地说,就是将目标文件的内容读取输出到终端,并且目标文件并不是静态的,而是随时会添加新的内容.我们的目标就是一旦目标文件添加了新的内容,就把它读取出来并且显示到终端上. 实现方法很简单,用一个变量offset标记已经读到了文件的哪个位置,每次循环开始前就将读指针指到相应位置.这里有两个tricky的地方需要注意,我们在每次循环的时候都要重复地打开和关闭文件,否则文件有更新也读不出来.当我们读到文件末尾时,会多读出一个字符(文件结束标识符?).具体的实现如下: packa