最近博客换上了 Hexo,但是发现经常莫名其妙构建失败,报内存溢出,Out of Memory,错误如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
==== JS stack trace =========================================
0: ExitFrame [pc: 0x1409219] Security context: 0x36ffd21408d1 <JSObject> 1: get sticky [0x36ffd2149801](this=0x1e69c6f730e1 <JSRegExp <String[10]: [\t \n\r]+>>) 2: match [0x6ca6396ae39] [/github/workspace/node_modules/js-beautify/js/src/core/inputscanner.js:~110] [pc=0x1d19a16be4dc](this=0x1e69c6f73119 <InputScanner map = 0x1c206a47a549>,0x1e69c6f730e1 <JSRegExp <String[10]: [\t \n\r]+>>) 3: tokenize [0x6ca6396e171] [/gith...
1: 0xa17c40 node::Abort() [hexo] 2: 0xa1804c node::OnFatalError(char const*, char const*) [hexo] 3: 0xb95a7e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [hexo] 4: 0xb95df9 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [hexo] 5: 0xd53075 [hexo] 6: 0xd53706 v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [hexo] 7: 0xd5ffc5 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [hexo] 8: 0xd60e75 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [hexo] 9: 0xd6251f v8::internal::Heap::HandleGCRequest() [hexo] 10: 0xd10f85 v8::internal::StackGuard::HandleInterrupts() [hexo] 11: 0x106c5c6 v8::internal::Runtime_StackGuard(int, unsigned long*, v8::internal::Isolate*) [hexo] 12: 0x1409219 [hexo]
|
原因就是内存溢出了,这是因为 Hexo 在构建的时候存了一个特别大的数组,而默认 Node 运行时最大内存为 512 MB,详情可以见:https://github.com/hexojs/hexo/issues/2165。
真是服了,才几百篇文章就不行了,耗费内存至于这么多吗?
解决方案,可以直接设置 Node 的最大内存限制,比如我直接设置为 16G,在构建之前执行如下命令就行了:
1
|
export NODE_OPTIONS="--max-old-space-size=16384"
|
这样就设置了 Node 运行时的最大内存,就不会触发内存溢出了。