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

2022-11-04 16:14:10 +08:00
 helloriver952

2906 次点击
所在节点    问与答
11 条回复
nomagick
2022-11-04 16:15:37 +08:00
正常的,v8 不愿意把内存释放给操作系统,倾向于自己管理,这有个上限,默认是不到 2G 来着
jchnxu
2022-11-04 16:19:05 +08:00
snapshot 一下,看哪些对象没有被释放?
helloriver952
2022-11-04 16:41:54 +08:00
@nomagick 有没有办法让他释放呢,一个服务器部署许多个程序,不释放掉太卡了。
尝试使用了 jemalloc 好像没什么用,不知道是不是姿势不对 我看 node 下边有 issue 通过 jemalloc 解决了此问题
helloriver952
2022-11-04 16:44:11 +08:00
@jchnxu 堆内存 189.38M ,应该不是程序内变量没有释放
nomagick
2022-11-04 16:56:52 +08:00
设置一下--max-old-space-size ,再不行就是 c++世界什么地方泄漏了,检查一下有没有用原生库之类的
helloriver952
2022-11-04 17:42:54 +08:00
@nomagick 谢谢 确实用到了 一些 c 和 c++的库 通过 child_process 调用的 我仔细排查一下
qfdk
2022-11-04 20:18:52 +08:00
干啥的啊 是不是有定时任务? 网络请求? graphql 这样的东西 fetch ?
gen900
2022-11-05 09:30:58 +08:00
去掉怀疑的模块,一个个试。看内存有没有降下来
helloriver952
2022-11-07 09:28:12 +08:00
@gen900 目前我在这样做呢
helloriver952
2022-11-07 09:30:13 +08:00
@qfdk 应该不是吧
helloriver952
2022-12-15 18:01:21 +08:00
经过排查最终发现是 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