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

4

我正在使用Nodejs,并计划增加Nodejs应用程序的内存限制。

在搜索时,我找到了这篇文章:增加Node.js内存限制

作者称他的服务器只有8GB物理内存,但他的Nodejs进程正在使用28GB内存。我认为这是使用了物理 + 交换内存。文章还提到,一个著名的Nodejs框架的开发者为他的Nodejs使用了15GB内存限制。

我试图从其他编程语言中搜索一些例子。在Java中,使用交换内存来处理JVM堆似乎不是一个好主意。参考如何通过增加交换大小来增加堆大小?,使用交换内存来处理JVM堆会带来重大问题。

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

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

1个回答

4
一个Nodejs进程可以使用比可用物理内存更多的内存(通过使用交换内存)。像任何其他进程一样,它由操作系统管理。进程请求新页面时,甚至不知道它是否已被交换。尽管如此,我不建议这样做,因为它可能导致性能下降。磁盘(即使是固态硬盘)比RAM慢几个数量级。个人而言,我不喜欢在我的系统上使用任何交换内存,正是出于这个原因。不幸的是,在Linux上,这意味着我不能挂起到磁盘,但我可以忍受这种情况。当您检查内存使用情况时,实际看到的并不总是那么明显。一些共享库可以同时映射到几个进程,并且您看到的使用情况并不总是真实的。此外,进程可能会请求大量内存,但这并不意味着它会得到它。真正的物理内存(RAM或交换)可以在第一次访问给定页面时映射,而不是在请求时。这是通过页面错误完成的。了解更多信息请参见:

这已经通过创建交换分区来增加内存以处理内存密集型任务的方式进行了成功测试。 - Abdalla Arbab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接