一次golang web的内存分析

栏目: Go · 发布时间: 4年前

内容简介:由于近期项目运行时,发现内存有一个规律性的增长。首先排查的是localcache的问题, 为了减少和redis的交互,对于一些热数据,同时更新频率也低,缓存周期内的数据延迟可以接受,采用了从redis读取到内存,进行二级缓存,缓存周期按数据量大小 为30s到10mins不等, 适当的调小内存中的周期减少了一部分内存的开销。这种内存占用毕竟占少数。需要分析其他占用。

一次golang web的内存分析

由于近期项目运行时,发现内存有一个规律性的增长。

首先排查的是localcache的问题, 为了减少和 redis 的交互,对于一些热数据,同时更新频率也低,缓存周期内的数据延迟可以接受,采用了从redis读取到内存,进行二级缓存,缓存周期按数据量大小 为30s到10mins不等, 适当的调小内存中的周期减少了一部分内存的开销。

这种内存占用毕竟占少数。需要分析其他占用。

用到的是 net/http/pprof 可在注册http路由时自定义,参考如下

path api
/debug/pprof pprof.Index
/debug/pprof/cmdline pprof.Cmdline
/debug/pprof/profile pprof.Profile
/debug/pprof/symbol pprof.Symbol
/debug/pprof/trace pprof.Trace

在运行服务的机器上,安装分析工具(对pprof生成的文件进行分析)

yum install graphviz

安装成功后,启动服务,执行下述命令

go tool pprof ./mm-go localhost:1601/debug/pprof/heap

输入 top10 查看内存占用前10的函数

得到的响应如下

Fetching profile from http://localhost:8080/debug/pprof/heap
Saved profile in /root/pprof/pprof.mm-go.localhost:1601.alloc_objects.alloc_space.inuse_objects.inuse_space.006.pb.gz
Entering interactive mode (type "help" for commands)
(pprof) top10
12369.14kB of 12369.14kB total (  100%)
Dropped 69 nodes (cum <= 61.84kB)
Showing top 10 nodes out of 23 (cum >= 512.02kB)
      flat  flat%   sum%        cum   cum%
10320.21kB 83.44% 83.44% 10320.21kB 83.44%  mm.com/priceServer.Worker.Start.func1.1
...

其中详细的数据如下表格

这样就能看到不同函数(func)占用内存大小以及占分配总内存的百分比了(flat)

flat flat% sum% cum cum% func
10320.21kB 83.44% 83.44% 10320.21kB 83.44% mm.com/priceServer.Worker.Start.func1.1
1024.41kB 8.28% 91.72% 1024.41kB 8.28% runtime.malg
512.50kB 4.14% 95.86% 512.50kB 4.14% runtime.allocm
512.02kB 4.14% 100% 512.02kB 4.14% runtime.rawstringtmp
0 100% 512.02kB 4.14% encoding/json.(*decodeState).literal
0 100% 512.02kB 4.14% encoding/json.(*decodeState).literalStore
0 100% 512.02kB 4.14% encoding/json.(*decodeState).object
0 100% 512.02kB 4.14% encoding/json.(*decodeState).unmarshal
0 100% 512.02kB 4.14% encoding/json.(*decodeState).value
0 100% 512.02kB 4.14% encoding/json.Unmarshal

根据提示查看内存占用较大的函数,来进行有针对性的优化


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Servlet和JSP学习指南

Servlet和JSP学习指南

Budi Kurniawan / 崔毅、俞哲皆、俞黎敏 / 机械工业出版社华章公司 / 2013-4-14 / 59.00元

本书是系统学习Servlet和JSP的必读之作。由全球知名的Java技术专家(《How Tomcat Works》作者)亲自执笔,不仅全面解读Servlet 和JSP 的最新技术,重点阐述Java Web开发的重要编程概念和设计模型,而且包含大量可操作性极强的案例。 本书共18章:第1章介绍Servlet API和几个简单的Servlet;第2章讨论Session追踪,以及保持状态的4种技术......一起来看看 《Servlet和JSP学习指南》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具