Node.js中Sharp在Linux上内存泄漏
前言
在使用Sharp的Node.js程序中我发现内存增长飞快,并且不下降,并想到是内存泄漏的问题,但是在Windows上测试确无法复现问题。
在GitHub Issues中搜索到 这个问题出现在Linux的内存分配器上,部分系统的内存分配器有问题,需要切换。
这里的对话比较长,看了很久,最终总结出来就是:sharp作者表示:该问题并不是内存泄露导致的问题,而是操作系统的内存分配机制不同,而出现的内存占用超出预期。 到这里可以确定并不是内存泄露导致的了(这也解释了为什么在window系统上没有出现此现象) 后面去找了sharp的官方网站,发现了对于内存分配的描述:链接
很多开发者反馈过这个问题,只需要下载新的内存分配器后修改环境变量即可:解决方案
解决
1.分配器安装
我的系统是Ubuntu 20.04 LTS x86_64
其他系统自行查询安装方法
sudo apt-get update
sudo apt-get install libjemalloc-dev
2.添加环境变量
安装完成后,你可以在系统的lib文件夹下看到该依赖库,路径是/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
路径并不固定,自己根据关键词搜索即可
- 将/etc/environment底部添加
LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2
- /etc/profile底部添加上
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
- 对Node.js设置环境变量 使用cross-env设置环境变量
"scripts": {
"dev": "cross-env ENV=production LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 nodemon ./src/index.js",
}
3.重启服务器
说明
内存分配器不一定要libjemalloc.so.2
也可能是libjemalloc.so.1
或者libjemalloc.so
请自行尝试