nodejs内存泄漏如何排查问题的根源所在?

使用webpack5打包项目时出现如下:

$ webpack

<--- Last few GCs --->

[25580:0000027506698B40]    65897 ms: Mark-sweep (reduce) 4127.5 (4132.2) -> 4127.2 (4133.2) MB, 17.0 / 0.0 ms  (average mu = 0.898, current mu = 0.002) last resort GC in old space requested
[25580:0000027506698B40]    65918 ms: Mark-sweep (reduce) 4127.2 (4132.2) -> 4127.1 (4133.2) MB, 20.3 / 0.0 ms  (average mu = 0.823, current mu = 0.001) last resort GC in old space requested

<--- JS stacktrace --->

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
 1: 00007FF612633E0F napi_wrap+108911
 2: 00007FF6125D7E16 v8::base::CPU::has_sse+61910
 3: 00007FF6125D8D16 node::OnFatalError+294
 4: 00007FF612EB0CEE v8::Isolate::ReportExternalAllocationLimitReached+94
 5: 00007FF612E95ACD v8::SharedArrayBuffer::Externalize+781
 6: 00007FF612D3F95C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1516
 7: 00007FF612D3AD91 v8::internal::Heap::AllocateExternalBackingStore+1601
 8: 00007FF612D54A05 v8::internal::GCIdleTimeHandler::ShouldDoContextDisposalMarkCompact+1029
 9: 00007FF612D54E55 v8::internal::Factory::AllocateRaw+37
10: 00007FF612D694DF v8::internal::FactoryBase<v8::internal::Factory>::NewRawTwoByteString+79
11: 00007FF612D63895 v8::internal::Factory::NewStringFromUtf8+181
12: 00007FF612EAC9BF v8::String::NewFromUtf8+287
13: 00007FF6124F82C1 v8::internal::HashTable<v8::internal::EphemeronHashTable,v8::internal::EphemeronHashTableShape>::HashTable<v8::internal::EphemeronHashTable,v8::internal::EphemeronHashTableShape>+33473
14: 00007FF6125F337B v8::internal::Malloced::operator delete+4107
15: 00007FF612E5DDCF v8::internal::Builtins::builtin_handle+321711
16: 00007FF612E5D364 v8::internal::Builtins::builtin_handle+319044
17: 00007FF612E5D657 v8::internal::Builtins::builtin_handle+319799
18: 00007FF612E5D4A3 v8::internal::Builtins::builtin_handle+319363
19: 00007FF612F39C8D v8::internal::SetupIsolateDelegate::SetupHeap+465453
20: 00007FF612ED2092 v8::internal::SetupIsolateDelegate::SetupHeap+40498
21: 000000F8E4F02432
error Command failed with exit code 134.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

像这种我只知道错误信息是内存泄漏导致的,但是打包的时候是哪一步造成内存泄漏的该如何去排查

阅读 3.1k
2 个回答

node_modules/.bin/文件夹下大概有个这么个文件webpack-dev-server.cmd,给node命令增加一个--max-old-space-size=4096增加一下内存限制,差不多是这样:

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\..\_webpack-dev-server@2.9.7@webpack-dev-server\bin\webpack-dev-server.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node  --max-old-space-size=4096  "%~dp0\..\_webpack-dev-server@2.9.7@webpack-dev-server\bin\webpack-dev-server.js" %*
)

希望能帮助到你。

新手上路,请多包涵

可以使用对比内存快照的方式,大部分情况下都能帮我们解决问题,除了一些情况却不太适用。还有其他的一些方法,比如MAT。具体操作你可以度娘一下.

已参与 「极客观点」 ,欢迎正在阅读的你也加入。

推荐问题