V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cjd6568358
V2EX  ›  Node.js

请教大家, node 应用启动就占用 10.4g 的虚拟内存怎么回事?

  •  
  •   cjd6568358 · 8 小时 46 分钟前 · 988 次点击
    最近一段时间,跑在 docker 里的 node 应用突然申请的虚拟内存大了起来,只要启动就达到了 10.4g ,不知道什么原因导致的,请问如何排查?
    node 应用是用 ncc 打包出的一个单文件,使用 forever 启动。
    docker 镜像是基于 node-22.9.0:alpine 构建。
    通过 docker stats 查看容器真实内存占用是正常的,只有 92mb 。除了虚拟内存占用高,别的都正常,比如 cpu 负载。
    尝试过的措施,都无法解决
    1.重启 docker 容器
    2.重启物理主机
    3.抛弃 forever,直接使用 node 启动
    4.不使用 ncc 打包成单文件,使用源代码启动
    5.重新构建 docker 镜像
    10 条回复    2024-09-29 17:24:40 +08:00
    Nitroethane
        1
    Nitroethane  
       8 小时 42 分钟前 via iPhone
    虚拟内存怕啥啊,申请多少都无所谓
    codehz
        2
    codehz  
       8 小时 38 分钟前
    VIRT 有啥可看的,你跑一个 haskell 的程序还能吃你 1TB 呢
    cjd6568358
        3
    cjd6568358  
    OP
       8 小时 31 分钟前
    @Nitroethane 问题以前不这样啊,而且跑定时脚本最近老是遇到系统资源不足的报错
    cjd6568358
        4
    cjd6568358  
    OP
       8 小时 31 分钟前
    @codehz 应该是 vsz
    arloor
        5
    arloor  
       7 小时 21 分钟前 via Android
    看 res ,不看 virt
    FishBear
        6
    FishBear  
       7 小时 13 分钟前
    虚拟内存不用看
    cjd6568358
        7
    cjd6568358  
    OP
       5 小时 15 分钟前
    @arloor 我看的是 vsz
    sagaxu
        8
    sagaxu  
       3 小时 58 分钟前
    @cjd6568358 以前不这样?那就确保操作系统,node 版本,各种库的版本都跟以前一样再做比较,用排除法找出原因。也许是某个版本更新之后引入了新的内存管理方式,Go 当初也有过类似的情况。

    这个 vsz 的大小不会引起资源不足,x86-64 架构下,每个进程可以有 256T 的虚拟内存地址空间。

    其实现在看 RES/RSS 也不准确了,误差可以很大,要结合 PSS 一起看才准。
    cjd6568358
        9
    cjd6568358  
    OP
       2 小时 5 分钟前
    @sagaxu 感谢。我改了一下定时脚本看看情况吧。以前没注意到 nodejs 的虚拟内存参数,最近频繁遇到告警邮件才注意到。nodejs 启动申请的虚拟内存都这么高吗?
    xuexingwei
        10
    xuexingwei  
       12 分钟前
    @cjd6568358 #3 我们项目今天也是报了这个异常,停用了几个服务才能正常打包,上次出现这个问题是几个月前了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4727 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:37 · PVG 17:37 · LAX 02:37 · JFK 05:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.