• 请不要在回答技术问题时复制粘贴 AI 生成的内容
pabno
V2EX  ›  程序员

go 服务器内存偶尔会飙升,有什么办法可以把内存 dump 下来?

  •  
  •   pabno · Jun 29, 2020 · 5780 views
    This topic created in 2320 days ago, the information mentioned may be changed or developed.

    最近生产服务器内存偶尔会飙升导致监控报警,不知道有没有什么办法把内存 dump 下来看里面具体有哪些对象,就像 java 中的 jmap -heap 一样

    试过 pprof,这个据我了解只能看到采样期间的内存分配情况,还有就是累计的分配情况,不能看到内存中对象分布

    11 replies  •  2020-07-01 19:45:25 +08:00
    richzhu
    richzhu
    Jun 29, 2020
    1
    同问,有的时候真的是莫名其妙
    reus
    reus
    Jun 29, 2020❤️3
    3
    如果你用的是 1.12 或者更新的版本,那 RSS 会一直增长,只在系统内存不够用的时候,内核才会回收这些内存。如果你的监控指标是 RSS,那可以用 GODEBUG=madvdontneed=1 这个环境变量切换回旧的回收方式。
    petelin
    petelin
    Jun 29, 2020 via iPhone
    4
    pprof 里有 heap debug=1 会有全部的内存分配
    gcore 配合 viewcore 就是对比 linux core
    Lonenso
    Lonenso
    Jun 29, 2020
    5
    pabno
    pabno
    OP
    Jun 30, 2020
    6
    @janxin 这个 dump 出来没找到有什么工具可以分析
    pabno
    pabno
    OP
    Jun 30, 2020
    7
    @Lonenso 这个好像可以,感谢
    pabno
    pabno
    OP
    Jun 30, 2020
    8
    @reus 我们暂时用的还是 1.10 版本,所以应该不存在 rss 一直增长的问题
    pabno
    pabno
    OP
    Jul 1, 2020
    10
    @janxin 这个尝试了一下,在 linux 上跑 viewcore 会报:invalid memory address or nil pointer dereference 的错误。我现在是使用 gcore 把进程的 coredump 文件 dump 下来再使用编译后的 viewcore 分析就会报错,但是如果使用 dlv 分析是正常的。可惜 dlv 没法查看内存分布。使用的 go 版本是 1.13

    @Lonenso 这个尝试了下,还是没法得到想要的功能
    Lonenso
    Lonenso
    Jul 1, 2020
    11
    因为你要解决内存飙升, 也有很多种情况, 我目前遇到过自己写的 goroutine 泄露导致的内存飙升. 我觉得你可以深入使用 pprof.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3056 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 04:39 · PVG 12:39 · LAX 20:39 · JFK 23:39
    ♥ Do have faith in what you're doing.