debugging 节点真实的调试日志

c9x0cxw0  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(134)

我在测试我的网络应用程序时遇到了高延迟。通常的响应时间在700 ms左右,但在重负载下,它攀升到15 s。我想调试瓶颈在哪里。
我认为最基本的方法是有一些类似于超级冗长的输出,在那里我可以看到它冻结或花费大部分时间的部分。现在Im与node inspect连接,Im循环pausecont来捕捉我们此刻的位置,但这还不够。有没有什么方法可以使所有调试输出可见并将其转发到文件?
我知道这将是一个巨大的输出量。
更新:附上我想要的verbouse输出的屏幕截图,这就是我现在用pause / cont做的事情,但是我想要这个输出的不间断流:

gg58donl

gg58donl1#

最后我以第一个方法的自动化结束。我创建了expect脚本,发送n(下一步)100000次,这样它就可以遍历整个页面加载。首先,我需要在不同的调试器窗口中暂停整个页面(不要关闭它,因为它会在退出时恢复执行)node inspect localhost:9229> debug> pause。然后,我可以运行期望脚本(在新窗口)管道到文件./nodebuger.exp 2>&1 | tee -a node.log

#!/usr/bin/expect

spawn node inspect localhost:9229
expect "debug>"

set times 0;
while { $times < 100000 } {
    send -- "n\r"
    expect "debug"
    set times [ expr $times+1];
}

在那里(经过一些清理),当我看到一堆n个字符的行时,我知道上一步仍在进行中(所以很慢):

关于如何在任何(也是实时的)env上快速启用调试器而不中断的好文章:https://medium.com/the-node-js-collection/live-debugging-node-js-apps-at-the-command-line-cd5b58f883e1

$ ps aux | grep node
user 23254  0.0  0.0    0     0 ?        I    08:53   0:00 node /script.js
$ kill -SIGUSR1 23254 #this is not killing the process, just enabling debugger
$ node inspect -p 23254
or 
$ node inspect localhost:9229

相关问题