【go 语言】PProf 的使用——CPU和内存占用分析(二)

简介: PProf 的使用——CPU和内存占用分析(二)

正文


一、原代码


package main
import (
    "log"
    "net/http"
    _ "net/http/pprof"
    "time"
)
var datas []string
func main() {
    go func() {
        for {
            log.Printf("len: %d", Add("qijing"))
            time.Sleep(time.Millisecond * 10)
        }
    }()
    _ = http.ListenAndServe("0.0.0.0:2022", nil)
}
func Add(str string) int {
    data := []byte(str)
    datas = append(datas, string(data))
    return len(datas)
}


12.webp.jpg


二、CPU 占用分析


项目更目录下执行 go tool pprof http://127.0.0.1:2022/debug/pprof/profile?seconds=30,结束之后会默认进入 PProf 的命令行交互模式,接着输入 top 10,如下图,

13.webp.jpg


  • flat: 函数自身的运行耗时。
  • flat%: 函数自身占 CPU 运行总耗时的比例。
  • sum%: 函数自身累积使用占 CPU 运行总耗时的比例。
  • cum: 函数自身及其调用的函数的运行总耗时。
  • cum%: 函数自身及其调用的函数占 CPU 运行总耗时的比例
  • Name: 函数名。


三、内存占用分析


项目根目录下执行 go tool pprof http://127.0.0.1:2022/debug/pprof/heap,结束之后会默认进入 PProf 的命令行交互模式,接着输入 top,如图所示,


14.webp.jpg


  • flat: 函数自身占内存大小。
  • flat%: 函数自身占总分配内存的比例。
  • sum%: 函数自身累积占用内存占总内存的比例。
  • cum: 函数自身及其调用的函数占内存大小
  • cum%: 函数自身及其调用的函数占总内存的比例。
  • Name: 函数名。


上面可以看到,main.main.fun1cum 大小正好等于自身的 flat 大小加上 main.Add 大小的 flat 大小

目录
相关文章
|
7天前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
28天前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
160 1
|
1月前
|
安全 Go 开发者
代码之美:Go语言并发编程的优雅实现与案例分析
【10月更文挑战第28天】Go语言自2009年发布以来,凭借简洁的语法、高效的性能和原生的并发支持,赢得了众多开发者的青睐。本文通过两个案例,分别展示了如何使用goroutine和channel实现并发下载网页和构建并发Web服务器,深入探讨了Go语言并发编程的优雅实现。
34 2
|
1月前
|
Java 编译器 测试技术
go语言避免不必要的内存分配
【10月更文挑战第18天】
43 1
|
1月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
287 2
|
1月前
|
存储 算法 Java
Go语言的内存管理机制
【10月更文挑战第25天】Go语言的内存管理机制
26 2
|
3月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
193 5
|
2月前
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。
|
2月前
|
算法 Java 编译器
你为什么不应该过度关注go语言的逃逸分析
【10月更文挑战第21天】逃逸分析是 Go 语言编译器的一项功能,用于确定变量的内存分配位置。变量在栈上分配时,函数返回后内存自动回收;在堆上分配时,则需垃圾回收管理。编译器会根据变量的使用情况自动进行逃逸分析。然而,过度关注逃逸分析可能导致开发效率降低、代码复杂度增加,并且对性能的影响相对较小。编译器优化通常比人工干预更准确,因此开发者应更多关注业务逻辑和整体性能优化。
|
2月前
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
53 0