ASP .NET Core 5 内存占用线性增加, 1 小时内 100%把 128G 内存用完,如果运行 dotnet-gcdump 则能立即恢复正常水平,查了很多文档 gcdump 都是不会去触发 GC 的,但多次尝试都成功,求排查思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX    .NET

ASP .NET Core 5 内存占用线性增加, 1 小时内 100%把 128G 内存用完,如果运行 dotnet-gcdump 则能立即恢复正常水平,查了很多文档 gcdump 都是不会去触发 GC 的,但多次尝试都成功,求排查思路

  •  
  •   drymonfidelia 2024-05-06 03:18:30 +08:00 3934 次点击
    这是一个创建于 523 天前的主题,其中的信息可能已经有所发展或是发生改变。
    接手别人的项目,代码不熟悉,dotnet-trace 看了很久也没找出问题

    dotnet-dump 出来的数据不会看,翻文档学了很久操作 minidump 的命令,发现用 dumpheap -stat -min 850000 这条命令可以找出一个 StackExchange.Redis.RawResult[] 的 Count 和 TotalSize 很大,不知道是否有关系。由于内存 dump 里面有很多密钥之类敏感信息,脱敏几乎无法完成,不然就 gzip 压缩一下放出来求助了

    项目里有非常多 Subscribe 不同 Redis 频道(动态生成的名称)的操作,从不 Unsubscribe ,不知道是否有关。
    21 条回复    2024-09-26 17:34:18 +08:00
    NXzCH8fP20468ML5
        1
    NXzCH8fP20468ML5  
       2024-05-06 06:28:10 +08:00
    我模糊印象中,StackExchange.Redis 早期版本有内存泄漏问题,升级一下试试?
    NXzCH8fP20468ML5
        2
    NXzCH8fP20468ML5  
       2024-05-06 06:35:09 +08:00
    如果在代码中定期调用 system.gc.collect 是否有内存下降,如果是的话,说明可能是高代的对象内存泄漏了。
    mingl0280
        3
    mingl0280  
       2024-05-06 07:38:16 +08:00 via Android
    dump 下来以后直接塞进 vs 看内存啊……
    xiangyuecn
        4
    xiangyuecn  
       2024-05-06 08:31:36 +08:00
    几分钟配置个定时重启,解决 99.99%疑难症
    poorcai
        5
    poorcai  
       2024-05-06 08:32:16 +08:00 via Android
    如果你会调试,使用 windbg 试一下
    idragonet
        6
    idragonet  
       2024-05-06 08:46:11 +08:00   1
    @xiangyuecn #4 这个是昏招!
    lujiaxing
        7
    lujiaxing  
       2024-05-06 08:47:29 +08:00
    qW7bo2FbzbC0
        8
    qW7bo2FbzbC0  
       2024-05-06 10:19:25 +08:00
    升级下 dotnet 版本 和 stack redis 版本
    ashuai
        9
    ashuai  
       2024-05-06 10:31:27 +08:00
    1. 需要优化 redis 大 key
    2. StackExchange.Redis bug 有点多,升级版本或换掉
    hez2010
        10
    hez2010  
       2024-05-06 11:35:22 +08:00
    运行 dotnet-gcdump 会强制进行一次完整的 gen 2 GC ,建议你考虑一下升级 .NET 和 StackExchange.Redis 的版本。
    .NET 5 已经终止支持了,建议直接升级到 .NET 8 观察,.NET 因为向后兼容做得很好升级就是改个版本号的事情。
    另外从不 Unsubscribe 也可能是原因之一。
    drymonfidelia
        11
    drymonfidelia  
    OP
       2024-05-06 15:07:26 +08:00
    @xiangyuecn 如果不是重启会导致客户端全断开连接一分钟 还真的会用这种方案 公司快倒闭了裁了一堆人 业务能用就行
    NXzCH8fP20468ML5
        12
    NXzCH8fP20468ML5  
       2024-05-06 15:54:39 +08:00 via Android
    @drymonfidelia 模糊印象中,之前博客园看过这个案例,和你说的 StackExchange.Redis.RawResult 多很像。
    并不是 StackExchange.Redis 的 bug ,而是不正确的方式接收消息导致的内存泄露问题。
    不过后续那个作者给 StackExchange.Redis 提了 issue ,新版本就做了兜底机制,所以我让你升级一下版本试试。
    drymonfidelia
        13
    drymonfidelia  
    OP
       2024-05-06 16:13:44 +08:00
    @xxfye 不敢升级最新版,早上升级到了 ASP.NET Core 6 ,StackExchange.Redis 2.2.88 ,还是存在这个问题。
    ggabc
        14
    ggabc  
       2024-05-06 16:17:43 +08:00
    偷个懒,加个定时线程自动回收
    drymonfidelia
        15
    drymonfidelia  
    OP
       2024-05-06 16:18:40 +08:00
    @ggabc 我就是这么做的,每 3 分钟 GC.Collect()一次,暂时是没出问题
    NXzCH8fP20468ML5
        16
    NXzCH8fP20468ML5  
       2024-05-06 16:20:01 +08:00 via Android
    @drymonfidelia 为啥不敢升级最新? aspnetcore 就算了,StackExchange.Redis 为啥不升
    NXzCH8fP20468ML5
        17
    NXzCH8fP20468ML5  
       2024-05-06 16:20:49 +08:00 via Android
    @drymonfidelia 那看起来就是高代现象的问题了。
    NXzCH8fP20468ML5
        18
    NXzCH8fP20468ML5  
       2024-05-06 16:22:25 +08:00 via Android
    @drymonfidelia 越来越像博客园那篇文章了,好像也是高代对象的问题,你可以搜一下文章试试。
    drymonfidelia
        19
    drymonfidelia  
    OP
       2024-05-06 16:26:34 +08:00
    @xxfye 之前遇到过升级 ClosedXML 还是别的什么包(想不起来)导致一个它依赖的包被升级了,然后这个包刚好砍了其它包依赖的几个对象,没有向前兼容,之后折腾降级又弄了很久。看 StackExchange.Redis 的 issue 有一些反馈升级后出现问题的,就不敢升级了
    lrh3321
        20
    lrh3321  
       2024-05-06 16:48:09 +08:00
    粗暴点,前面再加一层负责和客户端保持连接。读写 redis 放在一个定时重启的微服务里去做。
    baibaibaibai
        21
    baibaibaibai  
       2024-09-26 17:34:18 +08:00
    我这边之前一项目 GC dump 抓包分析出来是 redis 大 key 问题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2655 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:06 PVG 22:06 LAX 07:06 JFK 10:06
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86