当前位置: 首页 > 知识库问答 >
问题:

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

周志文
2023-03-14

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

在谷歌上搜索时,我发现了这篇文章:增加节点。js内存限制。

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

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

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

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

共有1个答案

汪跃
2023-03-14

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

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

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

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

有关更多信息,请参阅:

  • https://en.wikipedia.org/wiki/Virtual_memory
 类似资料:
  • 问题内容: 使用以下Java选项启动Apache Tomcat(Atlassian Confluence)实例: 但是,我看到启动后,它很快就耗尽了虚拟服务器上可用的1GB内存中的大部分。 总消耗的内存(堆+ PermGen)是否不应该保持在使用- Xmx指定的值以下?这引起的问题之一是我无法使用关闭脚本关闭服务器,因为它试图生成具有256MB内存的JVM,该JVM因不可用而失败。 问题答案: T

  • 我的java应用程序工作了大约1天,(我使用不同的库来处理照片,比如ffmpeg、javacv、javacpp),然后我看到我的应用程序使用了9,5GB的RAM。 I set-XMX6G 在VisualVM中,我看到堆空间大小为188M visualVM中的堆空间 编辑: 是的,我的应用程序有时会出现异常Java.lang.outofmemoryerror:Java堆空间

  • 来自标准::set_new_handler 每当内存分配尝试失败时,分配函数都会调用new-handler函数。它的预期目的有三个: 使更多内存可用 终止程序(例如,通过调用 std::terminate) 抛出类型 std::bad_alloc 或派生自 std::bad_alloc 的异常 以下超载保证会有什么影响吗?

  • 我想了解为什么多次动态分配调用的数据比直接在代码中指定的或通过的单个调用分配的数据使用如此多的内存。 例如,我用C编写了以下两个代码: 测试1.c:int x用malloc分配 我在这里没有使用free来保持简单。当程序等待交互时,我查看另一个终端中的顶级功能,它向我显示了以下内容: test2. c: int x不是动态分配的 顶部显示: 我还编写了第三个代码,其结果与test2相同,我在tes

  • 为什么我的java PID占用更多内存。目前我有24GB ram和max-xmx=15G。所以java PID的解决方案是占用更少的内存。 23794 root 0 22.2g 16.5g 13416 s 100.070.42980:54上面的java是我的最高命令结果。任何人都知道如何重新关注这个问题。

  • 我正在为我的计算机科学专业学习C语言的操作系统课程。 我很好奇这是否与分配内存时浪费的空间有关,以及这是否在任何计算机操作系统上有所不同,我理解内存的排列方式可以以最适合系统的任何顺序进行。