You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需Chrome Inspect,Node.js 8.16.1容器环境如何获取堆转储?

无需Chrome连接获取Node.js堆转储的方法(Node 8.16.1)

方法1:借助Node内置v8模块代码触发堆转储

在应用代码中添加信号监听逻辑,通过发送自定义信号触发快照生成:

const v8 = require('v8');
const fs = require('fs');

// 监听SIGUSR2信号生成堆快照
process.on('SIGUSR2', () => {
  const snapshotPath = `/tmp/heap-${Date.now()}.heapsnapshot`;
  const snapshotStream = v8.getHeapSnapshot();
  const fileStream = fs.createWriteStream(snapshotPath);
  snapshotStream.pipe(fileStream);
  console.log(`堆快照已保存至 ${snapshotPath}`);
});

修改代码重启应用后,在服务器执行以下命令触发快照:

# 获取容器内Node进程PID
docker exec <容器名/ID> pgrep node
# 发送SIGUSR2信号
docker exec <容器名/ID> kill -USR2 <Node进程PID>

最后将容器内的快照文件拷贝到宿主机:

docker cp <容器名/ID>:/tmp/heap-xxxxxx.heapsnapshot ./

方法2:使用node-heapdump第三方包

该包兼容Node 8版本,无需调试端口即可生成堆转储:

  1. 安装依赖:
npm install heapdump --save
  1. 在应用代码中引入包(默认监听SIGUSR2信号):
require('heapdump');
  1. 重启应用后,发送信号触发快照:
docker exec <容器名/ID> kill -USR2 <Node进程PID>

快照默认生成在应用工作目录,用docker cp命令导出即可。

方法3:容器内调用本地调试API生成快照

由于已用--inspect启动进程,可在容器内部通过本地调试端口调用API:

  1. 进入容器:
docker exec -it <容器名/ID> bash
  1. 安装curl(若容器未预装):
# Debian/Ubuntu系容器
apt-get update && apt-get install curl -y
# Alpine系容器
apk add curl
  1. 调用调试API生成快照:
# 创建调试会话,返回包含id的JSON
curl -X POST "http://localhost:9229/json/new" -H "Content-Type: application/json"
# 替换xxx为返回的id,下载快照
curl -X GET "http://localhost:9229/json/snapshot/xxx" > /tmp/heap-snapshot.heapsnapshot

完成后将快照文件拷贝到宿主机分析。

内容的提问来源于stack exchange,提问作者ataraxis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:56:05