2016-12-27 70 views
3

我正在使用Nodejs。我打算增加Nodejs应用程序的内存限制。Nodejs进程能否使用比可用物理内存更多的内存(通过使用交换内存)?

虽然使用谷歌搜索,我发现这篇文章:Increasing Node.js memory limits

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

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

我不确定JVM GC和Nodejs GC之间是否有任何区别。

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

回答

2

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

是的,它可以。像其他任何过程一样。它由OS管理。这个过程要求一个新的页面,它甚至不知道它是否被交换。

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

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

欲了解更多信息,请参阅: