likes
comments
collection

Node.js中Sharp在Linux上内存泄漏

作者站长头像
站长
· 阅读数 202

前言

在使用Sharp的Node.js程序中我发现内存增长飞快,并且不下降,并想到是内存泄漏的问题,但是在Windows上测试确无法复现问题。

Node.js中Sharp在Linux上内存泄漏

在GitHub Issues中搜索到 这个问题出现在Linux的内存分配器上,部分系统的内存分配器有问题,需要切换。

Node.js中Sharp在Linux上内存泄漏

这里的对话比较长,看了很久,最终总结出来就是:sharp作者表示:该问题并不是内存泄露导致的问题,而是操作系统的内存分配机制不同,而出现的内存占用超出预期。 到这里可以确定并不是内存泄露导致的了(这也解释了为什么在window系统上没有出现此现象) 后面去找了sharp的官方网站,发现了对于内存分配的描述:链接

Node.js中Sharp在Linux上内存泄漏

很多开发者反馈过这个问题,只需要下载新的内存分配器后修改环境变量即可:解决方案

Node.js中Sharp在Linux上内存泄漏

解决

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 路径并不固定,自己根据关键词搜索即可

  1. 将/etc/environment底部添加 LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2

Node.js中Sharp在Linux上内存泄漏

  1. /etc/profile底部添加上 export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2

Node.js中Sharp在Linux上内存泄漏

  1. 对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请自行尝试