致命错误:堆限制附近的无效标记压缩分配失败 - 无服务器部署的 JavaScript 堆内存不足

问题描述 投票:0回答:0

在将具有 aws lambda 函数的 api 从无服务器 2 迁移到无服务器 3 之后,我开始收到错误致命错误:堆限制附近的无效标记压缩分配失败 - 执行部署时 JavaScript 堆内存不足。该 API 包含大约 35 个 lambda 函数。使用 serverless-offline v8.8.1 和 serverless bundle v3.2.1。 **在serverless.yml的配置中 **

frameworkVersion: '3'

package:
  individually: true

plugins:
  - serverless-bundle
  - serverless-offline

custom:
  bundle:
    linting: false

** 来自 package.json 的依赖 **

"dependencies": {
        "@elastic/elasticsearch": "^7.13.0",
        "@middy/core": "^1.5.2",
        "@middy/db-manager": "^1.5.2",
        "@middy/http-cors": "^1.5.2",
        "@middy/http-header-normalizer": "^1.5.2",
        "@middy/http-json-body-parser": "^1.5.2",
        "@middy/http-response-serializer": "^1.5.2",
        "@middy/validator": "^1.5.2",
        "ajv": "^6.12.6",
        "aws-elasticsearch-js": "^1.0.3",
        "axios": "^0.27.2",
        "bcryptjs": "^2.4.3",
        "class-validator": "^0.13.1",
        "crypto-random-string": "^4.0.0",
        "data-api-client": "^1.2.0",
        "exceljs": "^4.2.1",
        "http-errors": "^1.8.0",
        "jsonwebtoken": "^8.5.1",
        "luxon": "^1.26.0",
        "nanoid": "^4.0.0",
        "node-fetch": "^2.6.1",
        "reflect-metadata": "^0.1.13",
        "s3-streams": "^0.4.0",
        "short-uuid": "^4.1.0",
        "typeorm": "0.2.32",
        "typeorm-aurora-data-api-driver": "2.1.0"
    },
    "devDependencies": {
        "@babel/core": "^7.14.0",
        "@babel/preset-env": "^7.14.1",
        "@babel/preset-typescript": "^7.13.0",
        "@types/aws-lambda": "^8.10.76",
        "@types/bcryptjs": "^2.4.2",
        "@types/http-errors": "^1.8.0",
        "@types/jest": "^26.0.23",
        "@types/jsonwebtoken": "^8.5.1",
        "@types/luxon": "^1.26.5",
        "@types/node": "^15.0.1",
        "@types/node-fetch": "^2.5.10",
        "@types/s3-streams": "^0.4.0",
        "@types/serverless": "^1.78.26",
        "@types/validator": "^13.7.12",
        "@typescript-eslint/eslint-plugin": "^5.51.0",
        "@typescript-eslint/parser": "^5.51.0",
        "aws-sdk": "^2.900.0",
        "babel-jest": "^26.6.3",
        "eslint": "^7.3.1",
        "eslint-config-airbnb": "^19.0.4",
        "eslint-config-prettier": "^8.5.0",
        "eslint-plugin-import": "^2.26.0",
        "eslint-plugin-jsx-a11y": "^6.5.1",
        "eslint-plugin-prettier": "^4.0.0",
        "jest": "^27.0.6",
        "prettier": "^2.3.2",
        "serverless-bundle": "^3.2.1",
        "serverless-domain-manager": "^6.4.1",
        "serverless-jetpack": "^0.11.1",
        "serverless-offline": "^8.8.1",
        "serverless-plugin-typescript": "^2.1.4",
        "typescript": "^4.9.5"
    }

错误

Individually packaging with concurrency at 8 entries a time.
Bundling with Webpack...
Starting type checking service...
Starting type checking service...
Starting type checking service...
Starting type checking service...
Starting type checking service...
Starting type checking service...
Starting type checking service...
Starting type checking service...
Starting type checking service...
Starting type checking service...
Starting type checking service...
(node:17792) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
Starting type checking service...
Starting type checking service...
Starting type checking service...
Starting type checking service...
Starting type checking service...

<--- Last few GCs --->

[17792:0000018E70086D30]   415695 ms: Mark-sweep 2015.0 (2069.0) -> 1999.3 (2070.0) MB, 1092.2 / 0.7 ms  (average mu = 0.202, current mu = 0.108) allocation failure scavenge might not succeed
[17792:0000018E70086D30]   417090 ms: Mark-sweep 2015.6 (2070.2) -> 1999.7 (2071.0) MB, 1220.8 / 0.7 ms  (average mu = 0.163, current mu = 0.125) allocation failure scavenge might not succeed


<--- JS stacktrace --->

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 00007FF606E65CEF napi_wrap+133327
 2: 00007FF606DFF616 DSA_meth_get_flags+63062
 3: 00007FF606E004AD node::OnFatalError+301
 4: 00007FF6076E3E3E v8::Isolate::ReportExternalAllocationLimitReached+94
 5: 00007FF6076C8C2D v8::SharedArrayBuffer::Externalize+781
 6: 00007FF60757242C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1516
 7: 00007FF60757D84A v8::internal::Heap::ProtectUnprotectedMemoryChunks+1258
 8: 00007FF60757A989 v8::internal::Heap::PageFlagsAreConsistent+2457
 9: 00007FF60756F521 v8::internal::Heap::CollectGarbage+2049
10: 00007FF607525FB7 v8::internal::ItemParallelJob::Item::TryMarkingAsProcessing+3079
11: 00007FF606D9241F std::basic_ostream<char,std::char_traits<char> >::operator<<+72767
12: 00007FF606D90CF6 std::basic_ostream<char,std::char_traits<char> >::operator<<+66838
13: 00007FF606EC2FDB uv_async_send+331
14: 00007FF606EC276C uv_loop_init+1292
15: 00007FF606EC290A uv_run+202
16: 00007FF606DBA355 v8::internal::AsmJsScanner::GetIdentifierString+51749
17: 00007FF606E32DE7 node::Start+311
18: 00007FF606C8685C RC4_options+339804
19: 00007FF607C493F8 v8::internal::compiler::RepresentationChanger::Uint32OverflowOperatorFor+14424
20: 00007FFA8C717034 BaseThreadInitThunk+20
21: 00007FFA8DAFD0D1 RtlUserThreadStart+33

几天来我一直在互联网上搜索类似的问题,并且我一直在尝试我找到的所有解决方案,从最重复的响应以增加节点的最大旧空间大小,到添加优化的插件部署,他们都没有帮助我。 我尝试减少部署中的功能数量,它仅在我尝试部署 4 或 5 个功能时有效,如果我添加更多功能,它会再次抛出相同的错误。

node.js aws-lambda serverless
© www.soinside.com 2019 - 2024. All rights reserved.