gpt4 book ai didi

node.js - NodeJS-卡住/卡住时打印堆栈跟踪

转载 作者:行者123 更新时间:2023-12-03 09:32:24 24 4
gpt4 key购买 nike

当它变得非常慢或卡住以获取有关性能峰值的信息时,是否可以打印nodejs应用程序的堆栈跟踪?
在该问题的再现未知的情况下,这将非常有用。
在Java中,这节省了数百个小时,并且很简单:

  • 产生一个新的“看门狗”线程
  • 每隔50ms从主线程向看门狗发送一次心跳
  • 如果“看门狗”在200毫秒内未收到心跳,请记录主线程堆栈

    nodejs可能会发生这种情况吗?
    FI:从sig kill事件启动时,nodejs诊断报告不包含任何javascript堆栈跟踪。

  • 最佳答案

    您正在寻找检查event loop是否被阻止或运行缓慢。有一个npm软件包https://www.npmjs.com/package/blocked-at可以检测到缓慢的同步执行并报告从何处开始。
    用法:

    const blocked = require('blocked-at');

    blocked((time, stack) => {
    console.log(`Blocked for ${time}ms, operation started here:`, stack)
    });
    您可以从头开始以这种方式进行检查:
    var interval = 500;
    var interval = setInterval(function() {
    var last = process.hrtime();
    setImmediate(function() {
    var delta = process.hrtime(last);
    if (delta > blockDelta) {
    console.log("node.eventloop_blocked", delta);
    }
    });
    }, interval);
    这个想法是:如果计时器没有在预期的时间后触发,则意味着事件循环在某些操作中被阻塞。
    此代码段检查事件循环是否被阻止超过500毫秒。这并不完美,建议您使用 blocked-at进行更强大的控制。

    关于node.js - NodeJS-卡住/卡住时打印堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64804009/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com