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

49 天前
 cjd6568358
最近一段时间,跑在 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 镜像
2123 次点击
所在节点    Node.js
10 条回复
Nitroethane
49 天前
虚拟内存怕啥啊,申请多少都无所谓
codehz
49 天前
VIRT 有啥可看的,你跑一个 haskell 的程序还能吃你 1TB 呢
cjd6568358
49 天前
@Nitroethane 问题以前不这样啊,而且跑定时脚本最近老是遇到系统资源不足的报错
cjd6568358
49 天前
@codehz 应该是 vsz
arloor
49 天前
看 res ,不看 virt
FishBear
49 天前
虚拟内存不用看
cjd6568358
49 天前
@arloor 我看的是 vsz
sagaxu
49 天前
@cjd6568358 以前不这样?那就确保操作系统,node 版本,各种库的版本都跟以前一样再做比较,用排除法找出原因。也许是某个版本更新之后引入了新的内存管理方式,Go 当初也有过类似的情况。

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

其实现在看 RES/RSS 也不准确了,误差可以很大,要结合 PSS 一起看才准。
cjd6568358
49 天前
@sagaxu 感谢。我改了一下定时脚本看看情况吧。以前没注意到 nodejs 的虚拟内存参数,最近频繁遇到告警邮件才注意到。nodejs 启动申请的虚拟内存都这么高吗?
xuexingwei
49 天前
@cjd6568358 #3 我们项目今天也是报了这个异常,停用了几个服务才能正常打包,上次出现这个问题是几个月前了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1076657

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX