6

这可能是一个新手问题,但我搜索并找不到令人满意的答案。

我的 node.js 应用程序似乎消耗了大量内存。每个进程消耗大约 100MB。我听说 nodejs 本身每个进程的内存占用约为 30MB。

该应用程序是一个 JSON api,由 MongoDB 支持。在某些情况下,一个 API 请求会导致许多数据库请求,主要是填充子关系。一个典型的查询是这样的:(1)根据查询条件获取一个objectIds数组,(2)迭代每个objectId,并向数据库发出查询以填充数据(有人称之为水合)。

该代码大量使用 async.js。我试图分析内存使用情况,似乎 async.js 正在使用大量内存,但没有内存泄漏的迹象。async.js 的作者还提出了一个流库 highland.js ( http://highlandjs.org/ )。我是 nodejs 流的新手,我很好奇这是否是替代 async.js 的可能工具?该网站似乎提到underscore但我主要async.js用于异步处理。

谢谢!

4

1 回答 1

1

tldr:是的,使用流可能会减少您的内存占用。处理流时,您一次处理大量数据。另一种方法基本上是预先将所有数据加载到字符串、缓冲区等中,然后对其进行处理。

但是,您应该注意 100MB对于节点进程来说并不大。Node/v8 假设您将有大约 1.5 GB 的空间可供使用。一个小应用程序可能是 128 MB,一个小的应用程序是 256,中等是 512。1 GB 是一个非常大的节点进程,此时您可能应该将您的应用程序拆分为更小的部分:

于 2015-07-25T18:14:57.937 回答