node.js - Google Cloud Services 中 f1 微型实例中 node.js 进程的进程内存限制?

标签 node.js google-cloud-platform google-compute-engine v8

我正在尝试在 Google 云服务上建立一个非常基本的基于 node.js 的项目/网站,并且正在使用他们的免费 f1 微型服务器之一。据说这些有大约 600mb 的 ram 可用。 htop 为我确认了这一点,并且还告诉我在空闲时,它占用了大约 112mb(默认情况下交换 0K,fwiw)。

我正在尝试启动的项目的一个特点是,为了最大程度地简化和加快速度,我require() 将一个 ~75mb json 对象放入我的 Node 进程的内存中,代替数据库。

在本地,这是没有问题的。但是当我尝试在 f1 微型实例上运行该应用程序时,我得到以下错误输出:

ft@instance-1:~/code/zipcode-mapping$ node app.js --max-old-space-size
`<--- Last few GCs --->`
re[2678:0x24bc6b0]      759 ms: Mark-sweep 163.7 (180.4) -> 137.6 (180.4) MB, 19.7 / 0.0 ms  (+ 75.4 ms in 248 steps since start of marking, biggest step 0.8 ms, walltime since start of marking 160 ms) finalize incremental marking via stack guard GC in old [2678:0x24bc6b0]     1483 ms: Mark-sweep 267.9 (307.6) -> 226.3 (306.1) MB, 13.3 / 0.0 ms  (+ 172.3 ms in 260 steps since start of marking, biggest step 5.1 ms, walltime since start of marking 257 ms) finalize incremental marking via stack guard GC in old
<--- JS stacktrace --->
Cannot get stack trace in GC.
FATAL ERROR: NewSpace::Rebalance Allocation failed - process out of memory
 1: node::Abort() [node]
 2: 0x11e7fec [node]
 3: v8::Utils::ReportOOMFailure(char const*, bool) [node]
 4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node]
 5: 0xad2f0b [node]
 6: v8::internal::MarkCompactCollector::Evacuate() [node]
 7: v8::internal::MarkCompactCollector::CollectGarbage() [node]
 8: v8::internal::Heap::MarkCompact() [node]
 9: v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [node]
10: v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node]
11: v8::internal::Factory::NewFixedDoubleArray(int, v8::internal::PretenureFlag) [node]
12: v8::internal::JsonParser<true>::ParseJsonArray() [node]
13: v8::internal::JsonParser<true>::ParseJsonValue() [node]
14: v8::internal::JsonParser<true>::ParseJsonArray() [node]
15: v8::internal::JsonParser<true>::ParseJsonValue() [node]
16: v8::internal::JsonParser<true>::ParseJsonArray() [node]
17: v8::internal::JsonParser<true>::ParseJsonValue() [node]
18: v8::internal::JsonParser<true>::ParseJsonObject() [node]
19: v8::internal::JsonParser<true>::ParseJsonValue() [node]
20: v8::internal::JsonParser<true>::ParseJsonObject() [node]
21: v8::internal::JsonParser<true>::ParseJsonValue() [node]
22: v8::internal::JsonParser<true>::ParseJsonArray() [node]
23: v8::internal::JsonParser<true>::ParseJsonValue() [node]
24: v8::internal::JsonParser<true>::ParseJsonObject() [node]
25: v8::internal::JsonParser<true>::ParseJsonValue() [node]
26: v8::internal::JsonParser<true>::ParseElement(v8::internal::Handle<v8::internal::JSObject>) [node]
27: v8::internal::JsonParser<true>::ParseJsonObject() [node]
28: v8::internal::JsonParser<true>::ParseJsonValue() [node]
29: v8::internal::JsonParser<true>::ParseJson() [node]
30: v8::internal::Builtin_JsonParse(int, v8::internal::Object**, v8::internal::Isolate*) [node]
31: 0x17b0a8697d
Aborted

我的问题是,如何确定施加的进程内存限制(以及该限制的来源),如果合理,我该如何扩展这些限制?

干杯。

最佳答案

这里是 V8 开发人员。 TL;DR:看起来您只是没有足够的可用内存来执行您想执行的操作。

在最后两次成功运行 GC 之后,为 JavaScript 堆保留的内存分别为 180MB 和 306MB。下一次 GC 尝试失败,因为操作系统拒绝为进程提供另一个页面。可以肯定的是,当时堆内存消耗约为 450MB,这大约是您的设置所允许的。

“一个 75MB 的 JSON 对象”是什么意思?如果 JSON 字符串的大小为 75MB,那么解析的对象将比这大很多。使用不需要将所有数据保存在内存中的数据库可能是有意义的。

此外,--max-old-space-size 单独没有任何作用;该标志的目的是指定一个值,例如--max-old-space-size=1000 最大堆大小为 1000MB。但是,这不是您的问题,因为您没有遇到堆限制,这是有道理的,因为默认值比您的服务器提供的要多。

关于node.js - Google Cloud Services 中 f1 微型实例中 node.js 进程的进程内存限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49604156/

相关文章:

html - Node js连接mysql数据库出错

javascript - 尝试 POST 时无法从请求正文获取对象的值 [Node.js、MySQL]

mongodb - Google Cloud Functions 是否会针对每个 HTTP 请求重新连接到我的 MongoDB 客户端?

python - 适用于Docker的Google Cloud日志记录驱动程序不会收集日志

docker - GCloud:将文件从本地计算机复制到Docker容器

linux - 如何为 gcloud 的 linux 服务器分配外部 ip?

javascript - 引用误差 - Angular 未定义

email - 如何启用应用程序从谷歌容器引擎发送电子邮件

https - 谷歌云 ssl 证书 "The SSL certificate could not be parsed"

javascript - 如何在 sails.js/node.js 中实现 Evercookie?