4

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

在谷歌搜索时,我发现了这篇文章:增加 Node.js 内存限制

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

我试图从其他编程语言中搜索一些示例。在 Java 中,将交换内存用于 JVM 堆似乎不是一个好主意。参考这篇文章:如何增加交换大小允许我增加堆大小?,为 JVM 堆使用交换内存会产生很大的问题。

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

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

4

1 回答 1

4

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

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

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

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

有关更多信息,请参阅:

于 2016-12-27T16:56:04.633 回答