V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
LASockpuppet
0.02D
V2EX  ›  Node.js

node 堆栈溢出怎么排查根因啊

  •  
  •   LASockpuppet · Jan 7, 2025 via iPhone · 2623 views
    This topic created in 478 days ago, the information mentioned may be changed or developed.

    项目里更新了一个依赖版本,这个依赖的新版本增加了其他依赖。然后在项目构建时,node 内存爆了。。。z 有什么方法能排查根因吗

    9 replies    2025-02-25 00:16:55 +08:00
    wangritian
        1
    wangritian  
       Jan 7, 2025
    如果是我,先加一倍同内存容量的页面文件/交换区快速试试水
    sagaxu
        2
    sagaxu  
       Jan 7, 2025
    先不要排查,排查出来大概率只能降版本,无法根治,建议先尝试调高 heap 的大小。node 使用的 v8 引擎,默认 heap 最多只能使用 1/4 物理内存,如果是 8G 的机器,heap 上限只有 2G ,已经不能满足很多 build 任务了。
    june4
        3
    june4  
       Jan 8, 2025   ❤️ 1
    先试试一个简单的办法,可以省一些内存
    LD_PRELOAD=/usr/lib/libjemalloc.so npm/node ...
    LASockpuppet
        4
    LASockpuppet  
    OP
       Jan 8, 2025 via iPhone
    @sagaxu 把 node 调到了 6g ,还是爆了,感觉是新依赖里面循环依赖导致的,用的是 webpack 4
    fengYH8080
        5
    fengYH8080  
       Jan 8, 2025
    把 package-lock.json 和 node_modules 删了重新下载一遍依赖,如果怀疑是循环依赖,可以全局装个 madge 检查下项目有没有循环依赖
    gesse
        6
    gesse  
       Jan 9, 2025
    @june4
    效果怎么样? 有实际运营环境中的数据吗?
    FishBear
        7
    FishBear  
       Jan 13, 2025
    @gesse #6 效果非常好 小内存 linux 主机必须上这个 否则有严重的内存碎片
    zurmokeeper
        8
    zurmokeeper  
       Feb 21, 2025
    可以尝试下使用 node --inspect-brk index.js (启动文件名),然后用 chrome 链接,打一下内存快照,然后分析下内存占用
    LASockpuppet
        9
    LASockpuppet  
    OP
       Feb 25, 2025 via iPhone
    这个确实是循环依赖的问题,然后后面改了下 npm 的依赖解析方式,cnpm 模式下就会有这个问题
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2194 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 764ms · UTC 00:34 · PVG 08:34 · LAX 17:34 · JFK 20:34
    ♥ Do have faith in what you're doing.