1
yimity 2019-01-04 10:09:25 +08:00
这个是为啥呢?
|
2
zy445566 2019-01-04 10:19:46 +08:00
你的 node 是什么版本的,是否使用了 buffer,之前听说 node 修复了一个 buffer 导致内存泄露的 BUG
|
5
zy445566 2019-01-04 10:29:35 +08:00
真的很神奇,但你这个是典型的内存泄露,居然可以通过改 jemalloc 化解,真想知道原因
|
6
kernel OP @zy445566 不是内存泄露,我写了好多 node 微服务,全这样,这特么不是我的锅吧
(因为有一个还特简单,不到 100 行,就是转一下图片格式) 另外你 google 一下,小内存机子运行 node 全是这问题, 参考 https://github.com/damianmr/heroku-node-settings |
7
libook 2019-01-08 11:49:31 +08:00
用了五年 Node 了,只有最开始的两年遇到过 Node 内存泄露的问题,当时是定时重启,后来到了 Node6 好像就没有遇到过内存泄漏问题了,阿里云几十台 1 核 2G 的机器,分布式部署一个程序稳定运行数周,内存正常。。。
如果你用 Debian 的目前稳定版的话,我看到 nodejs 包依赖了 libc (其实就是 glibc ): https://packages.debian.org/stretch/nodejs 或者你用 n、nvm 之类的安装 Node,不清楚是不是会直接用系统内预装的 glibc ? 所以会不会是你装的多数版本的 Node 都是共用的某一个版本的 glibc 提供的内存分配器,而这个版本内存分配器有内存泄漏问题,所以导致不管哪个版本的 Node 都有这个问题。。。实际上你的试验只控制了内存分配器这一个变数,所以基本能得出这个结论。 所以如果有时间可以尝试一下升级系统内的内存分配器动态链接库的版本,看看是不是也能解决这个问题?或者看看默认内存分配器的 issue 或 changelog 是否有提到相关内存泄露问题。 |
8
kernel OP @libook 之前加了 max_old_space_size 后内存占用大,但是到那个限制后就不再增加了,程序也不崩,应该不是内存泄漏问题。jemalloc 看一些文章说明它是有缓解内存碎片减少 RSS 的作用。
|
9
zy445566 2019-01-10 17:48:04 +08:00
@kernel
巧了,三天前我也是这么猜测的 https://cnodejs.org/topic/5c300bf15bf06c5e7e3f17d7#5c330ce13898674067a7c19a 说不定真可以试一下升级内置的内存动态分配器 |
10
zy445566 2019-01-10 17:54:10 +08:00
|
11
haohello 2019-01-16 15:13:07 +08:00
@kernel 你可以看看朴灵写的《深入浅出 nodejs 》,这本书虽然出了都好几年了,但是原理性的内容却是市面上唯一讲到的,里面有专门一节讲述 node 内存的一章,你所提到的内存限制其实都是 v8 对于 js 对象的大小限制,可以多用用 buffer, stream 这些。
|
12
zzwwjjdj319 2019-01-31 14:14:18 +08:00
为什么我的一直都是 70 多 MB,没出现过你说的几百 M 的
|
13
maxsky 2019-05-17 16:24:24 +08:00
我也一直 600+M,CentOS 7 和 macOS 都是,分别 Node 10 与 12 版本,两个系统都试了下启动 Node 前 export LD_PRELOAD 并指定 jemalloc,内存依旧...会不会是 Node 版本原因
|