{"id":10021372,"date":"2026-06-01T02:44:00","date_gmt":"2026-05-31T18:44:00","guid":{"rendered":"https:\/\/itmax.cn\/?p=10021372"},"modified":"2026-06-01T02:44:00","modified_gmt":"2026-05-31T18:44:00","slug":"%e8%ae%b0%e5%bd%95%e5%ae%a2%e6%88%b7-nodejs-%e6%8e%a2%e9%92%88%e5%bc%82%e5%b8%b8%e9%97%ae%e9%a2%98","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10021372","title":{"rendered":"\u8bb0\u5f55\u5ba2\u6237 nodejs \u63a2\u9488\u5f02\u5e38\u95ee\u9898"},"content":{"rendered":"<h2>\u8d77\u6b65<\/h2>\n<p>\u8bb0\u5f55\u662f\u56e0\u4e3a\u5f02\u5e38\u7684\u539f\u56e0\u662f node \u81ea\u8eab\u7684\u95ee\u9898\u3002<\/p>\n<h2>\u95ee\u9898\u8bf4\u660e<\/h2>\n<p>\u5ba2\u6237\u62a5\u9519\uff0c\u62a5\u9519\u65e5\u5fd7\uff1a<\/p>\n<pre><code>2025-03-08 19:40:27.770: RangeError: Value undefined out of range for undefined options property undefined\n    at Map.set (&lt;anonymous&gt;)\n    at AsyncHook.init (\/opt\/bonree\/apm\/agent\/nodejs\/7.1.0\/Bonree\/lib\/models\/async_trace.js:18:18)\n    at PromiseWrap.emitInitNative (internal\/async_hooks.js:127:43)\n    at Promise.then (&lt;anonymous&gt;)\n    at next (\/data\/node_modules\/co\/index.js:100:51)\n    at onFulfilled (\/data\/node_modules\/co\/index.js:69:7)\n    at runMicrotasks (&lt;anonymous&gt;)\n    at processTicksAndRejections (internal\/process\/task_queues.js:97:5)<\/code><\/pre>\n<p>\u5ba2\u6237node\u7248\u672c\uff1a<code>12.16.2<\/code><\/p>\n<h2>\u6392\u67e5<\/h2>\n<p>\u6839\u636e\u62a5\u9519\u4fe1\u606f\u770b\u5230\u63a2\u9488\u4ee3\u7801\uff1a<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047758091\" alt=\"79697-bkw4hlb974i.png\" title=\"79697-bkw4hlb974i.png\"><\/p>\n<p>\u4e00\u5f00\u59cb\u4ee5\u4e3a\u53d8\u91cf <code>self.stack<\/code> \u662f\u4e2a <code>undefined<\/code> \uff0c\u4f46\u5b83\u5176\u5b9e\u5728\u521d\u59cb\u5316\u7684\u65f6\u5019\u5df2\u7ecf\u662f map \u5bf9\u8c61\u4e86\u3002<\/p>\n<p>\u540e\u6765\u53d1\u73b0\u662f map \u4f53\u79ef\u592a\u5927\u5f15\u8d77\u7684\u3002<\/p>\n<p><a href=\"https:\/\/link.segmentfault.com\/?enc=toK%2BqvADsGBKGH8ikcIQXw%3D%3D.LBlcKmkO5cvmMyRQHP%2BjpdAhHbF4JaHaIMCbffkTJvtaWDfUNEj%2Fliaw1FxFoqtJ\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/github.com\/nodejs\/node\/issues\/37320<\/a><\/p>\n<p>\u672c\u5730\u590d\u73b0map\u4f53\u79ef\u8fc7\u5927\uff1a<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047758092\" alt=\"23627-ysxtqtx6j2p.png\" title=\"23627-ysxtqtx6j2p.png\" loading=\"lazy\"><\/p>\n<p>node \u9650\u5236\u4e86 map \u4f53\u79ef\u4e0d\u80fd\u8d85\u8fc7 <code>2^24<\/code> \u3002<\/p>\n<h2>\u5206\u6790<\/h2>\n<p>node\u63a2\u9488\u4ee3\u7801\u901a\u8fc7 async_hooks \u6a21\u5757\u5b9e\u73b0\u4e86\u5bf9\u5f02\u6b65\u51fd\u6570\u7684 hook\uff0c\u5176 api \u4e3a\uff1a<a href=\"https:\/\/link.segmentfault.com\/?enc=LfNFp8LotqE5ZH0sv6e5rQ%3D%3D.y1Z2uv0GtolVzwpe1UR%2FXl%2Bwfd5vfV1OsBq4EYA1Jcn12NVfVjhfxXan8z55GGBWxd04A00%2BzovAjxT2RpqE7CFBo92IIQhs52s2gUHEuK3jlZreggJWfTrNP6AWvrAsf%2BQiqUJZubVJmNP5AOrIzA%3D%3D\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">\u5f02\u6b65\u94a9\u5b50 | Node.js v12.22.12 \u6587\u6863 &#8212; Async hooks | Node.js v12.22.12 Documentation<\/a><\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047758093\" alt=\"93637-o9fhl4scvve.png\" title=\"93637-o9fhl4scvve.png\" loading=\"lazy\"><\/p>\n<p>\u63a2\u9488\u4ee3\u7801\u6709\u5728\u5f02\u6b65\u5b9e\u4f8b\u9500\u6bc1\u65f6\uff0c\u628a\u5143\u7d20\u4ece map \u4e2d\u79fb\u9664\u3002\u4f46\u4e0d\u77e5\u5ba2\u6237\u5e94\u7528\u91cc\u7684\u5f02\u6b65\u5b9e\u4f8b\u4e00\u76f4\u6ca1\u9500\u6bc1\uff0c\u6211\u4eec\u63a2\u9488\u5c31\u6ca1\u6536\u5230 <code>destroy<\/code> \u4e8b\u4ef6\u3002<\/p>\n<p>\u540e\u6765\u53d1\u73b0\uff0c\u662f node \u7248\u672c\u7684\u95ee\u9898\uff0c\u5ba2\u6237\u662f <code>12.16.2<\/code> \u4f1a\u6709\u8fd9\u4e2a\u95ee\u9898\uff0c\u5728 <code>12.22.12<\/code> \u5219\u4fee\u590d\u4e86\u8fd9\u4e2a\u95ee\u9898\u3002<\/p>\n<p>github issue: <a href=\"https:\/\/link.segmentfault.com\/?enc=sqKd9XxSvw5AMYO04I3oBA%3D%3D.D4jqea5tfRo%2FSvL3HF1jN8k%2B98iRHcbTQnDrNrlGJJfxys43aI5ATbDJ9hDvJhw3\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">Memory leak on Promise.all with async\/await \u00b7 Issue #34328 \u00b7 nodejs\/node<\/a><\/p>\n<p>\u6d4b\u8bd5\u811a\u672c\uff1a<\/p>\n<pre><code>const { createHook } = require(&quot;async_hooks&quot;);\n\nconst m = new Map();\ncreateHook({\n    init(id) {\n        m.set(id, &quot;val&quot;);\n    },\n    destroy(id) {\n        m.delete(id);\n    }\n}).enable();\n\n(async function () {\n    const a = new Array(10).fill(0)\n    for (let i = 0; i &lt; 1e8; i++) {\n        await Promise.all(a.map(() =&gt; Promise.resolve()))\n        if (i % 1e5 === 0) {\n            console.log(Math.round(process.memoryUsage().heapUsed \/ 1024 \/ 1024), 'MB')\n        }\n    }\n})()<\/code><\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047758094\" alt=\"44542-bxfyvnwu1ic.png\" title=\"44542-bxfyvnwu1ic.png\" loading=\"lazy\"><\/p>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000047758089\">https:\/\/segmentfault.com\/a\/1190000047758089<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8d77\u6b65 \u8bb0\u5f55\u662f\u56e0\u4e3a\u5f02\u5e38\u7684\u539f\u56e0\u662f node \u81ea\u8eab\u7684\u95ee\u9898\u3002 \u95ee\u9898\u8bf4\u660e \u5ba2\u6237\u62a5\u9519\uff0c\u62a5\u9519\u65e5\u5fd7\uff1a 2025-03-08 1 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10021372","post","type-post","status-publish","format-standard","hentry","category-share"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10021372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10021372"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10021372\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10021372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10021372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10021372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}