Nodejs进程可以使用比可用物理内存更多的内存(通过使用交换内存)吗?

时间:2016-12-27 15:16:37

标签: node.js memory memory-management swap swapfile

我正在使用Nodejs。我打算增加Nodejs应用程序的内存限制。

谷歌搜索时,我发现了这篇文章:Increasing Node.js memory limits

作者说他的服务器只有8GB个物理内存,但他的Nodejs进程正在使用28GB内存。我假设它正在使用physical + swap内存。文章还提到着名的Nodejs框架的开发人员对他的Nodej使用15GB内存限制。

我试图从其他编程语言中搜索一些示例。在Java中,似乎将交换内存用于JVM堆并不是一个好主意。参考这篇文章:How increasing swap size allow me to increase the heap size?,使用交换内存进行JVM堆会产生很大的问题。

我不确定JVM GC和Nodejs GC之间是否存在任何差异。

Nodejs进程是否可以使用比可用物理内存更多的内存(通过使用交换内存)?

1 个答案:

答案 0 :(得分:2)

  

Nodejs进程是否可以使用比可用物理内存更多的内存(通过使用交换内存)?

是的,它可以。像任何其他过程一样。它由操作系统管理。该流程要求提供新页面,并且它甚至不知道它是否已被交换。

但是,我不推荐它,因为它可能会导致性能下降。磁盘(甚至SSD)比RAM慢几个数量级。就个人而言,我个人并不喜欢在我的系统上使用任何交换内存。不幸的是,在Linux上,这意味着我无法暂停到磁盘,但我可以忍受它。

检查内存使用情况时实际看到的内容并不总是那么明显。某些共享库可以同时映射到多个进程,您看到的用法并不总是真实的。一个过程也可以要求大量的内存,但这并不意味着它得到了它。实际物理内存(RAM或交换)可以在第一次实际访问给定页面时进行映射,而不是在请求时进行映射。它完成了页面错误。

有关详细信息,请参阅: