V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
helloriver952
V2EX  ›  问与答

nodejs 写的后端 常驻内存(Rss)慢慢增长很高 请问一下如何排查是什么出了问题呢

  •  1
     
  •   helloriver952 · Nov 4, 2022 · 3592 views
    This topic created in 1277 days ago, the information mentioned may be changed or developed.

    内存监控图片

    11 replies    2022-12-15 18:01:21 +08:00
    nomagick
        1
    nomagick  
       Nov 4, 2022
    正常的,v8 不愿意把内存释放给操作系统,倾向于自己管理,这有个上限,默认是不到 2G 来着
    jchnxu
        2
    jchnxu  
       Nov 4, 2022
    snapshot 一下,看哪些对象没有被释放?
    helloriver952
        3
    helloriver952  
    OP
       Nov 4, 2022
    @nomagick 有没有办法让他释放呢,一个服务器部署许多个程序,不释放掉太卡了。
    尝试使用了 jemalloc 好像没什么用,不知道是不是姿势不对 我看 node 下边有 issue 通过 jemalloc 解决了此问题
    helloriver952
        4
    helloriver952  
    OP
       Nov 4, 2022
    @jchnxu 堆内存 189.38M ,应该不是程序内变量没有释放
    nomagick
        5
    nomagick  
       Nov 4, 2022
    设置一下--max-old-space-size ,再不行就是 c++世界什么地方泄漏了,检查一下有没有用原生库之类的
    helloriver952
        6
    helloriver952  
    OP
       Nov 4, 2022
    @nomagick 谢谢 确实用到了 一些 c 和 c++的库 通过 child_process 调用的 我仔细排查一下
    qfdk
        7
    qfdk  
    PRO
       Nov 4, 2022 via iPhone
    干啥的啊 是不是有定时任务? 网络请求? graphql 这样的东西 fetch ?
    gen900
        8
    gen900  
       Nov 5, 2022 via iPhone
    去掉怀疑的模块,一个个试。看内存有没有降下来
    helloriver952
        9
    helloriver952  
    OP
       Nov 7, 2022
    @gen900 目前我在这样做呢
    helloriver952
        10
    helloriver952  
    OP
       Nov 7, 2022
    @qfdk 应该不是吧
    helloriver952
        11
    helloriver952  
    OP
       Dec 15, 2022
    经过排查最终发现是 node-canvas 的问题 可能是 c++内存泄露 https://github.com/Automattic/node-canvas/issues/1974 目前未得到解决
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2242 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 00:48 · PVG 08:48 · LAX 17:48 · JFK 20:48
    ♥ Do have faith in what you're doing.