错误捕获与内存告警
平台兼容性问题
内存泄露
对内存进行"检查"
安装
npm install heapdump -S
使用
var heapdump = require("heapdump");
let startMem = process.memoryUsage();
function calc(data) {
return Math.round((data / 1024 / 1024) * 10000) / 10000 + " MB";
}
// 使用的是 koa
router.all("/foo", async (ctx, next) => {
let mem = process.memoryUsage();
logger.debug(
"memory before",
calc(startMem.rss),
"memory now:",
calc(mem.rss),
"diff increase",
calc(mem.rss - startMem.rss)
);
// ...
});
进程处理
如果在退出之前需要做一些后续的处理,那么可以将 process.exit()放在其它回调函数内调用。
process.on("SIGINT", function () {
console.log("Exit now!");
port.write("ddd", function () {
process.exit();
});
});
内存泄露检测
我们通过安装 memwatch 能够方便发现内存泄漏,首先安装这个模块:
npm install --save memwatch
在我们的代码中加入:
var memwatch = require('memwatch'); memwatch.setup();
加入发现泄漏的事件:
memwatch.on('leak', function(info) { console.error('Memory leak detected: ', info); }); 我们通过安装 memwatch 能够方便发现内存泄露
Heapdump
node-heapdump 是一个能够用于导出 V8 heap 的工具,然后在 Chrome Devtools 中进行详细检测,你也能在其中比较 heap 快照,这就更容易发现你的泄漏在什么地方。
现在让我们在上面代码中导出堆图,每次有内存泄漏发生时,我们就将 V8 的 stack 输出快照到磁盘中:
memwatch.on("leak", function (info) {
console.error(info);
var file = "/tmp/myapp-" + process.pid + "-" + Date.now() + ".heapsnapshot";
heapdump.writeSnapshot(file, function (err) {
if (err) console.error(err);
else console.error("Wrote snapshot: " + file);
});
});
cpu 负载检测
// /app/lib/cpu.js const os = require('os'); // cpu 核心数 const length = os.cpus().length; // 单核 CPU 的平均负载 os.loadavg().map(load => load / length);
最后更新于
这有帮助吗?