请教个 gin 的问题。

2019-06-06 11:50:08 +08:00
 peanuts7660
我用 gin 写了一个 web,实现的功能是从另一个网站的的接口中获取一个 json ,然后将 json 处理过滤后返回。
这个 json 结构非常复杂,在解析的过程中,我使用了很多次的 make(map[string]interface{}) 来解析。
我打好包刚运行时内存占用 2M 左右,第一次访问后内存涨到 4M,第二次访问涨到 5M,然后以后 一千次 访问内存会涨到 9M 左右,接着我又访问了十万次,内存涨到了 10.6M 就不动了 。
请问下为什么会出现如此怪异的内存波动?是不是存在内存泄漏?
第一次写 go 的项目,还请大家多多指教。
2947 次点击
所在节点    Go 编程语言
8 条回复
hellowang
2019-06-06 11:51:45 +08:00
看你头像进来的
Yoock
2019-06-06 11:53:13 +08:00
golang pprof 看一下堆栈
pursuer
2019-06-06 11:56:46 +08:00
内存回收不是用完就立即回收的
EthanDon
2019-06-06 11:57:08 +08:00
json 解析还需要手动吗,gin 的话不是直接 bindjson 就完了吗。。。
bagel
2019-06-06 11:58:16 +08:00
头几次一直涨因为还没触发 GC 吧。十万次稳定在 10M,说明没有内存泄露,GC 很稳。Go 真是独立开发者福音,小服务器上跑全套足够用。对比 Java,10M 连 JVM 都起不起来。
memorycancel
2019-06-06 12:27:44 +08:00
不要自己用 struct 解析 json ,用三方库,我以前用的 gjson 这个,还行吧,凑活用
reus
2019-06-06 14:38:06 +08:00
用 struct 是最方便的,不知道为啥一定要用 map[string]interface{},不嫌 type assertion 麻烦?

另外这个内存占用没有任何怪异之处
aliipay
2019-06-06 19:36:18 +08:00
map[string]interface{} 应该是最糟糕的地方,struct 和 gjson 都还不错,可以看具体情况选择

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/571445

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX