温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Node节点内存泄漏怎么查

发布时间:2026-10-17 05:48:18 来源:亿速云 阅读:88 作者:小樊 栏目:系统运维

“Node 节点内存泄漏”通常指 Node.js 进程 内存泄漏,也可能指 Kubernetes Node 节点 上系统内存泄漏。我先按最常见的 Node.js 应用内存泄漏来讲,最后补充 K8s Node 的情况。


一、Node.js 内存泄漏排查思路

1. 先确认是不是内存泄漏

观察指标:

  • process.memoryUsage()
  • RSS / heapUsed 是否持续上涨不回落
  • 重启后内存从低开始,又慢慢涨上去
setInterval(() => {
  console.log(process.memoryUsage());
}, 5000);

2. 开启堆快照(Heap Snapshot)

最常用手段。

方式一:使用 --inspect

node --inspect app.js

然后用 Chrome:

  • 打开 chrome://inspect
  • Memory → Take heap snapshot
  • 多次采样对比

重点看:

  • 某类对象数量持续增长
  • 闭包、数组、Map、Listener 异常大

3. 使用 heapdump 生成快照

npm i heapdump
const heapdump = require('heapdump');
setInterval(() => {
  heapdump.writeSnapshot(`/tmp/heap-${Date.now()}.heapsnapshot`);
}, 60000);

对比多个快照,找“只增不减”的对象。


4. 常见泄漏点(重点)

✅ 事件监听器未移除

emitter.on('data', handler); // 没有 off

✅ 定时器未清理

setInterval(...) // 永远不 clear

✅ 闭包引用外部大对象

function leak() {
  const big = new Array(1e6);
  return () => big;
}

✅ 全局变量 / Map / Set 无限增长

global.cache = {};
global.cache[Date.now()] = data;

✅ 请求未结束(流式数据)

  • HTTP / WebSocket 未 close
  • 数据库连接未释放

5. 使用 clinic.js(强烈推荐)

npm i -g clinic
clinic heap-profiler -- node app.js

自动分析:

  • 内存增长来源
  • 热点函数

6. 生产环境轻量方案

  • prom-client + Grafana
  • 监控 heapUsed
  • 内存超阈值自动 dump

二、Kubernetes Node 节点内存泄漏

如果你指的是 K8s Node:

排查命令

kubectl top node
kubectl top pod -A

常见原因

  • 某个 Pod 内存无限增长
  • 系统进程(kubelet / docker / containerd)
  • 缓存未回收(page cache)

定位 Pod

kubectl describe node <node>
kubectl get pods -A -o wide

三、你可以告诉我

为了更精准帮你,可以补充:

  1. 是 Node.js 应用 还是 K8s Node?
  2. 用的框架(Express / Nest / Koa)?
  3. 是否有监控图或报错?
  4. 内存多久涨满?

我可以给你具体排查命令或代码级定位方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手