V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
peanuts7660
V2EX  ›  Go 编程语言

请教个 gin 的问题。

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

    另外这个内存占用没有任何怪异之处
    aliipay
        8
    aliipay  
       2019-06-06 19:36:18 +08:00
    map[string]interface{} 应该是最糟糕的地方,struct 和 gjson 都还不错,可以看具体情况选择
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1005 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:36 · PVG 05:36 · LAX 13:36 · JFK 16:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.