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

2022 年 11 月 4 日
 helloriver952

3650 次点击
所在节点    问与答
11 条回复
nomagick
2022 年 11 月 4 日
正常的,v8 不愿意把内存释放给操作系统,倾向于自己管理,这有个上限,默认是不到 2G 来着
jchnxu
2022 年 11 月 4 日
snapshot 一下,看哪些对象没有被释放?
helloriver952
2022 年 11 月 4 日
@nomagick 有没有办法让他释放呢,一个服务器部署许多个程序,不释放掉太卡了。
尝试使用了 jemalloc 好像没什么用,不知道是不是姿势不对 我看 node 下边有 issue 通过 jemalloc 解决了此问题
helloriver952
2022 年 11 月 4 日
@jchnxu 堆内存 189.38M ,应该不是程序内变量没有释放
nomagick
2022 年 11 月 4 日
设置一下--max-old-space-size ,再不行就是 c++世界什么地方泄漏了,检查一下有没有用原生库之类的
helloriver952
2022 年 11 月 4 日
@nomagick 谢谢 确实用到了 一些 c 和 c++的库 通过 child_process 调用的 我仔细排查一下
qfdk
2022 年 11 月 4 日
干啥的啊 是不是有定时任务? 网络请求? graphql 这样的东西 fetch ?
gen900
2022 年 11 月 5 日
去掉怀疑的模块,一个个试。看内存有没有降下来
helloriver952
2022 年 11 月 7 日
@gen900 目前我在这样做呢
helloriver952
2022 年 11 月 7 日
@qfdk 应该不是吧
helloriver952
2022 年 12 月 15 日
经过排查最终发现是 node-canvas 的问题 可能是 c++内存泄露 https://github.com/Automattic/node-canvas/issues/1974 目前未得到解决

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

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

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

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

© 2021 V2EX