Node.js的堆快照充满了旧版本的代码串
我公司不断部署Node.js的API服务器。正在运行的进程的内存使用量的增长,我尽管部署最少的代码和依赖的变化服务的新版本。此外,内存使用率不尽管是Node.js的(v8.12.0
)以及类似的使用和正常运行时间的完全相同的代码和版本过类似的环境是一致的。
例如,在一个旧的环境中,API服务器重新启动后,在另一个年轻,但相同的,环境使用600MB〜,这是〜个重新启动后370MB。
调查内存使用情况,我把使用Chrome开发者工具堆快照。摘要表明,堆了约88%的字符串:
纵观快照中〜900K弦乐,他们中的绝大多数似乎是包含API服务器代码的旧版本字符串:
作为“文件名”显示在底部的细节部分,这个字符串是一个很老的版本源文件的完整代码。有数以百计的(貌似全部)旧的源文件版本。这些文件是从服务器在释放过程中删除,但在API进程堆莫名其妙地结束了。
我已经尝试开始减少--max-old-space-size
过程中,它会导致程序崩溃启动时。
我不能确定如何/为什么以前的源代码作为进程堆字符串结束了。我部署使用指向在最新版本中的符号链接current
目录。或许也与此有关的是,我用通天transpile我们的源代码(曾几何时用于异步/ AWAIT,现在ES6进口)。
为什么Node.js的旧添加源文件作为字符串堆,如何防止这种情况发生?
回答如下:我不知道内部的NodeJS是如何工作的。但是,有可能是一个机会,节点的缓存以某种方式解决符号链接和存储旧脚本。
您是否尝试过移动/删除旧的版本从他们位于何处?
Node.js的堆快照充满了旧版本的代码串
我公司不断部署Node.js的API服务器。正在运行的进程的内存使用量的增长,我尽管部署最少的代码和依赖的变化服务的新版本。此外,内存使用率不尽管是Node.js的(v8.12.0
)以及类似的使用和正常运行时间的完全相同的代码和版本过类似的环境是一致的。
例如,在一个旧的环境中,API服务器重新启动后,在另一个年轻,但相同的,环境使用600MB〜,这是〜个重新启动后370MB。
调查内存使用情况,我把使用Chrome开发者工具堆快照。摘要表明,堆了约88%的字符串:
纵观快照中〜900K弦乐,他们中的绝大多数似乎是包含API服务器代码的旧版本字符串:
作为“文件名”显示在底部的细节部分,这个字符串是一个很老的版本源文件的完整代码。有数以百计的(貌似全部)旧的源文件版本。这些文件是从服务器在释放过程中删除,但在API进程堆莫名其妙地结束了。
我已经尝试开始减少--max-old-space-size
过程中,它会导致程序崩溃启动时。
我不能确定如何/为什么以前的源代码作为进程堆字符串结束了。我部署使用指向在最新版本中的符号链接current
目录。或许也与此有关的是,我用通天transpile我们的源代码(曾几何时用于异步/ AWAIT,现在ES6进口)。
为什么Node.js的旧添加源文件作为字符串堆,如何防止这种情况发生?
回答如下:我不知道内部的NodeJS是如何工作的。但是,有可能是一个机会,节点的缓存以某种方式解决符号链接和存储旧脚本。
您是否尝试过移动/删除旧的版本从他们位于何处?