golang runtime pprof 和 http pprof有啥区别
pprof
是 Go 语言标准库中的一个性能分析工具,它允许你收集和分析程序在运行时的性能数据,帮助你找出性能瓶颈和优化机会。pprof
支持多种分析方式,其中包括 runtime pprof 和 http pprof。
Runtime pprof:
runtime/pprof
包提供了与 Go 程序的运行时性能数据相关的函数。通过在代码中导入这个包,你可以在程序运行时启动性能分析器,然后在适当的地方插入采样点,以捕获堆内存分配、CPU 使用情况、线程阻塞等数据。这些采样数据可以被保存到文件中,然后通过 pprof 工具进行分析。HTTP pprof:
net/http/pprof
包则提供了一种通过 HTTP 服务暴露性能分析接口的方式。通过导入这个包,并将其注册到你的 HTTP 路由器中,你可以通过浏览器访问相应的 URL 来获取性能分析数据。这种方式对于远程监控和分析来说非常方便,不需要直接访问服务器的文件系统。
总的来说,区别在于数据的收集和访问方式。Runtime pprof 在程序内部手动添加采样点,将数据保存到文件中,然后用 pprof 工具分析;而 HTTP pprof 则通过 HTTP 接口暴露数据,可以通过浏览器访问。两者可以根据需求和场景的不同来选择使用。
举例说明
当使用 Go 语言的 pprof
库时,你可以选择是在代码中直接使用 runtime pprof,还是使用 http pprof 通过 HTTP 服务来获取性能分析数据。下面我将为你举例说明这两种情况。
1. Runtime pprof 举例:
在这个例子中,我们导入了 runtime/pprof
包并使用 StartCPUProfile
开始 CPU 采样,然后在代码中进行一些计算。最后,我们使用 StopCPUProfile
停止采样,并将 CPU 采样数据保存到文件中。同样,我们还使用 WriteHeapProfile
将堆内存分配数据保存到文件中。
2. HTTP pprof 举例:
在这个例子中,我们导入了 _ "net/http/pprof"
来注册 http pprof 的路由。然后,我们在一个 goroutine 中不断分配内存,模拟一个可能的内存泄漏。最后,我们使用 http.ListenAndServe
启动一个 HTTP 服务器,该服务器会暴露 pprof 接口。
你可以在浏览器中访问 http://localhost:8080/debug/pprof/
来查看和分析性能数据,比如 CPU、内存等信息。
原文链接:https://duoke360.com/post/5860