去年转到 node 后发现真香,所有的微服务全都用 node 写了,然后马上发现了一个问题,之前 python 写的程序第 1 天和每 1000 天运行的内存都是一样的,而 node 程序会比较快地增长,直到 boom。
后来发现是因为 node 默认内存限制 1.7G ,而我的小机全是 1G - 2G 的,内存不足。
Google 了一翻,加上命令行选项
--max_old_space_size=600 --max_semi_space_size=8
发现有很大缓解,boom 的次数很少了,但是有另一个问题,就是运行二天后 node 内存就占了 600 - 800M 左右,但是没 Google 到别的解法,就这样将就了一年。
前几天翻 github 时发现另一个解法,在前面选项的基础上再替换默认内存分配器,用 jemalloc。
debian 上是
apt install libjemalloc-dev
然后运行 node 前
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1
我是用 systemd 的,service 文件里加一行
Environment=LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1
就行。
然后运行了三天,以前会占用 700M 内存的程序目前稳定在 120M 了,和以前 python 类似。
后来发现是因为 node 默认内存限制 1.7G ,而我的小机全是 1G - 2G 的,内存不足。
Google 了一翻,加上命令行选项
--max_old_space_size=600 --max_semi_space_size=8
发现有很大缓解,boom 的次数很少了,但是有另一个问题,就是运行二天后 node 内存就占了 600 - 800M 左右,但是没 Google 到别的解法,就这样将就了一年。
前几天翻 github 时发现另一个解法,在前面选项的基础上再替换默认内存分配器,用 jemalloc。
debian 上是
apt install libjemalloc-dev
然后运行 node 前
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1
我是用 systemd 的,service 文件里加一行
Environment=LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1
就行。
然后运行了三天,以前会占用 700M 内存的程序目前稳定在 120M 了,和以前 python 类似。