Tag: 内存

1 Posts

thumbnail
golang 内存占用信息解读
触发方法: 其中debug参数为2是以高可读的方式提供各活跃Goroutine的状态信息和调用栈信息,更便于理解。 方法一(内容比较少场景适用) curl http://localhost:8001/debug/pprof/heap?debug=2 # 这个输出信息可以参考下面的解读 方法二(内容比较多场景适用) # adserver是我的程序名字,需要换成你自己的 scp 10.200.95.17:/opt/zyz/services/bin/adserver ./ # 参数信息见下面“交互式命令” go tool pprof adserver [-alloc_space|-inuse_space] http://10.200.95.17:8001/debug/pprof/heap?debug=2 # 接下来查看方法参考cpu性能统计方式,是类似的 https://www.vvniu.com/108.html 交互式命令 除了和查看cpu一致的top、list等命令,还有就是查看方式不同。 在使用 pprof 查看内存的时候,通常会用到两个选项。 - alloc_space用于告诉你已经分配了多少内存 - inuse_space用于获得正在使用的内存的数量 信息解读 解读一 # 看第一行的1: 5816320 [1: 5816320],四个数字的含义是当前存活对象的数量、存活对象已经占用的内存、分配的总的数量和所有分配已经占用的内存。 对应于具体代码来讲ip_helper.go:52中对应ipRecords对象,当前占用了582k内存,当前的存活的对象也只有一个,总共分配的对象数量也是1个,总共占用内存也是582k。 1: 5816320 [1: 5816320] @ 0x443d21 0x46806d 0x468614 0x94cf80 0x78a4b7 0x50f457 0x50a82b 0x466017 0x4019cb 0x42fa2f 0x460f01 # 0x46806d adserver/util.init.2+0xaed /home/jiyalei/serving_clean/backend/src/adserver/util/ip_helper.go:52 # 0x468614 adserver/util.init+0xf4 /home/jiyalei/serving_clean/backend/src/adserver/util/ip_helper.go:88 # 0x94cf80 adserver/nctrserver.init+0x40 /home/jiyalei/serving_clean/backend/src/adserver/nctrserver/nctrclient.go:42 # 0x78a4b7 adserver/bidserver.init+0x47 /home/jiyalei/serving_clean/backend/src/adserver/bidserver/spec.go:97 # 0x50f457 adserver/bucket.init+0x47 /home/jiyalei/serving_clean/backend/src/adserver/bucket/util.go:52 # 0x50a82b adserver/antispam.init+0x3b /home/jiyalei/serving_clean/backend/src/adserver/antispam/antispam.go:201 # 0x466017 adserver/server.init+0x47 /home/jiyalei/serving_clean/backend/src/adserver/server/adserver_handler.go:356 # 0x4019cb main.init+0x3b /home/jiyalei/serving_clean/backend/src/adserver/adserver.go:36 # 0x42fa2f runtime.main+0x27f /data/opt/go/src/runtime/proc.go:177 解读二 # ip_helper.go:29对应的对象是`line := strings.TrimSuffix(sc.Text(), ";")`读取文件临时生成的内容[]string,其中当前存活了11个,占用内从352字节,总共分配了14个,总共占用内存是448字节。 11: 352 [14: 448] @ 0x4481c7 0x44804f 0x46787c 0x468614 0x94cf80 0x78a4b7 0x50f457 0x50a82b 0x466017 0x4019cb 0x42fa2f 0x460f01 # 0x46787c adserver/util.init.2+0x2fc /home/jiyalei/serving_clean/backend/src/adserver/util/ip_helper.go:29 # 0x468614 adserver/util.init+0xf4 /home/jiyalei/serving_clean/backend/src/adserver/util/ip_helper.go:88 # 0x94cf80 adserver/nctrserver.init+0x40 /home/jiyalei/serving_clean/backend/src/adserver/nctrserver/nctrclient.go:42 # 0x78a4b7 adserver/bidserver.init+0x47 /home/jiyalei/serving_clean/backend/src/adserver/bidserver/spec.go:97 # 0x50f457 adserver/bucket.init+0x47 /home/jiyalei/serving_clean/backend/src/adserver/bucket/util.go:52 # 0x50a82b adserver/antispam.init+0x3b /home/jiyalei/serving_clean/backend/src/adserver/antispam/antispam.go:201 # 0x466017 adserver/server.init+0x47 /home/jiyalei/serving_clean/backend/src/adserver/server/adserver_handler.go:356 # 0x4019cb main.init+0x3b /home/jiyalei/serving_clean/backend/src/adserver/adserver.go:36 # 0x42fa2f runtime.main+0x27f /data/opt/go/src/runtime/proc.go:177 解读三 # runtime.MemStats # Alloc = 232368464 // 系统分配了,并且仍在使用的内存 # TotalAlloc = 515498984 // 分配的内存总量 # Sys = 379609648 // 从系统得到的内存总量 # Lookups…