【问题标题】:How to use Node.js with Jemalloc?如何在 Jemalloc 中使用 Node.js?
【发布时间】:2018-11-09 23:08:56
【问题描述】:

Node.js 可以与 Jemalloc (https://github.com/nodejs/node/issues/21973) 一起使用。在大多数情况下,它会缩短 RSS,这是我的大问题。

但我找不到任何关于如何在 Jemalloc、机器上或 docker 中使用 node 的信息。

有人可以帮忙吗?

【问题讨论】:

  • 我认为是通过修补节点的源代码或弄乱构建文件来完成的

标签: node.js jemalloc


【解决方案1】:

我刚刚完成了将我们的 nodejs 应用程序切换到 jemalloc 的过程,这是我在 Debian stretch 上的操作过程:

安装 jemalloc:

sudo apt-get install libjemalloc-dev

找到 jemalloc 二进制文件:

sudo find / -name "*jemalloc*"

在 /usr/lib/... 以 .so 结尾的文件夹中查找文件,例如路径可以是 /usr/lib/x86_64-linux-gnu/libjemalloc.so

将服务器配置为对所有程序使用 jemalloc:

  1. 使用预加载配置创建文件:

sudo nano /etc/ld.so.preload

  1. 将jemalloc二进制文件的路径添加到文件中:

/path/to/jemalloc/binary

  1. 重启nodejs并检查是否使用了jemalloc,例如像这样(如果使用 jemalloc,您应该会看到一些显示 jemalloc 二进制文件的行):

cat /proc/<PID OF NODEJS>/smaps | grep jemalloc

替代方案:仅对 nodejs 使用 jemalloc

在 bash 中执行

export LD_PRELOAD=$LD_PRELOAD:/path/to/jemalloc/binary

在启动 nodejs 进程之前

【讨论】:

  • 谢谢!我会尽快尝试。但这是否意味着 jemalloc 将成为系统范围的内存分配器?
  • 其实是的。如果您不希望这样做:在启动 nodejs 进程之前导出 LD_PRELOAD=$LD_PRELOAD:。但是,这需要每次在 nodejs 启动之前进行。可能有只为 nodejs 二进制文件配置它的选项,但我现在不知道这些......
猜你喜欢
  • 1970-01-01
  • 2018-03-04
  • 2018-11-23
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 2019-06-02
  • 2019-07-15
  • 2016-11-24
相关资源
最近更新 更多