下面由golang教程栏目给大家介绍使用golang的pprof包对程序进行性能分析,希望对需要的朋友有所帮助!

golang提供pprof包,可以监控golang程序的堆栈,cpu的耗时等性能信息。下边就说一下这个pprof包的使用。
1,首先是引入,在两个地方可以引入:

“net/http/pprof” "runtime/prof"

其中"net/http/pprof"是用“runtime/pprof” 包装了一下,然后再http端口暴露出来,让我们可以再浏览器查看程序的性能分析。“runtime/pprof”可以生成*.pprof的文件,然后根据这个文件做性能分析.
2,然后就是在代码中使用pprof了,实际运用中分三种情况:
1)
如果程序本身就是web服务器,那么只需要通过代码:

import(_"net/http/pprof" )

,将pprof引入,然后在浏览器访问http://localhost:port/debug/pprof/就能看到当前web服务的状态,包括CPU占用情况和内存使用情况等
2)
如果你的go程序不是web服务器,而是一个服务进程,那么你就需要开启一个goroutine来开启端口监听。
比如:

go func() {         log.Println(http.ListenAndServe("localhost:6060", nil))  }()

同样的访问http://localhost:6060/debug/pprof就可以查看程序运行的信息。
3)如果你的程序只是一个应用程序,那么你就需要使用“runtime/ppprof”包了。
官网给出的代码是这样的:

var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") func main() {     flag.Parse()     if *cpuprofile != "" {         f, err := os.Create(*cpuprofile)         if err != nil {             log.Fatal(err)         }         pprof.StartCPUProfile(f)         defer pprof.StopCPUProfile()     }

,然后我们在运行这个程序的时候加上一个参数--cpuprofile=*.prof就可以再对应目录下生成一个.pprof的文件,程序运行的信息就都在这个文件里了。然后进入对应目录,运行命令:go tool pprof 加刚才生成的pprof文件命即可进入到pprof中,输入web命令,可以生成对应的svg文件。

第二种方式:
再使用“net/http/pprof”包的时候,我们同样可以使用go tool pprof命令来查看程序运行的情况。例如我们启动了一个简单的go服务器程序,监听再8080端口,那么我们就可以使用以下命令进入pprof的命令行:
利用这个命令查看堆栈信息:

go tool pprof http://localhost:6060/debug/pprof/heap 利用这个命令可以查看程序CPU使用情况信息: go tool pprof http://localhost:6060/debug/pprof/profile 使用这个命令可以查看block信息: go tool pprof http://localhost:6060/debug/pprof/block 进入pprof命令行,输入help,查看命令帮助, topN命令可以查看占用前N 的线程或者函数,用svg可以生成svg图。 pprof简单使用就是这样了,掌握了使用方法,在实践中加以利用才是我们的目的,希望我写的这些可以对你有所帮助。

ps;因为我并没有真正的用golang写过大型的程序,也没有对这个包真正的用过,只是看了几篇文章和官网上的一些资料汇总了一下,难免犯形而上学的错误,欢迎指正!谢谢

更多相关文章

  1. 你知道go程序的基本要素吗
  2. go语言常用命令有哪些
  3. 关于golang封装一个bash函数,用于执行bash命令
  4. godoc命令不存在的解决方法
  5. 概述IE和SQL2k开发一个XML聊天程序
  6. 用XSL翻译Web服务应用程序
  7. 自定义XML动态配置程序的示例代码分享
  8. 详解XML与现代CGI应用程序的示例代码
  9. 利用xmllint命令处理xml

随机推荐

  1. 计算机网络面试知识点(1)基本概述
  2. SpringBoot整合Netty搭建高性能Websocket
  3. java并发编程CAS机制原理分析(面试必问,学
  4. Android(安卓)Service、Messenger进程间
  5. JDBC原理分析(包括基本的使用方式和面试题
  6. Spring Ioc 实例化 Bean 对象有几种方式?
  7. Springboot实现定时任务
  8. 纳税服务系统总结
  9. array must be initialized with a brace
  10. 冒泡排序就这么简单