Node.js 如何读取nodejs内部探查器处理器输出

Node.js 如何读取nodejs内部探查器处理器输出,node.js,profiling,profiler,v8,Node.js,Profiling,Profiler,V8,我对分析Node.js应用程序感兴趣。 我从--prof标志开始,获得了一个v8.log文件。 我使用了windows tick处理器,并获得了一个据说是人类可读的分析日志。 问题的底部是日志文件中的一些小摘录,我完全无法理解 我得到了滴答声的统计方法。我不明白totalvsnonlib是什么意思。 我也不明白为什么有些东西的前缀是lazycomile,Function,Stub或其他术语 我希望的最佳答案是完整的tick processor输出格式文档/指南,完整解释每个术语、结构等 除此之外

我对分析Node.js应用程序感兴趣。 我从
--prof
标志开始,获得了一个
v8.log
文件。 我使用了windows tick处理器,并获得了一个据说是人类可读的分析日志。 问题的底部是日志文件中的一些小摘录,我完全无法理解

我得到了滴答声的统计方法。我不明白
total
vs
nonlib
是什么意思。 我也不明白为什么有些东西的前缀是
lazycomile
Function
Stub
或其他术语

我希望的最佳答案是完整的tick processor输出格式文档/指南,完整解释每个术语、结构等

除此之外,我不明白什么是懒惰编译。是编辑吗?不是每个函数都只编译一次吗?那么,编译怎么可能成为我的应用程序执行的重要部分呢?应用程序运行了数小时以生成此日志,我假设内部JavaScript编译需要数毫秒。 这表明延迟编译不是每个函数都会发生一次,而是在某种代码求值过程中发生的?这是否意味着每当我有一个函数定义(例如一个嵌套函数)时,内部函数每次都会得到“惰性编译”

我在任何地方都找不到这方面的任何信息,我已经在谷歌上搜索了好几天

我还意识到有很多探查器标志。此外,还欢迎更多关于这些问题的参考资料

[JavaScript]: ticks total nonlib name 88414 7.9% 20.1% LazyCompile: *getUniqueId C:\n\dev\SCNA\infra\lib\node-js\utils\general-utils.js:16 22797 2.0% 5.2% LazyCompile: *keys native v8natives.js:333 14524 1.3% 3.3% LazyCompile: Socket._flush C:\n\dev\SCNA\runtime-environment\load-generator\node_modules\zmq\lib\index.js:365 12896 1.2% 2.9% LazyCompile: BasicSerializeObject native json.js:244 12346 1.1% 2.8% LazyCompile: BasicJSONSerialize native json.js:274 9327 0.8% 2.1% LazyCompile: * C:\n\dev\SCNA\runtime-environment\load-generator\node_modules\zmq\lib\index.js:194 7606 0.7% 1.7% LazyCompile: *parse native json.js:55 5937 0.5% 1.4% LazyCompile: *split native string.js:554 5138 0.5% 1.2% LazyCompile: *Socket.send C:\n\dev\SCNA\runtime-environment\load-generator\node_modules\zmq\lib\index.js:346 4862 0.4% 1.1% LazyCompile: *sort native array.js:741 4806 0.4% 1.1% LazyCompile: _.each._.forEach C:\n\dev\SCNA\infra\node_modules\underscore\underscore.js:76 4481 0.4% 1.0% LazyCompile: ~_.each._.forEach C:\n\dev\SCNA\infra\node_modules\underscore\underscore.js:76 4296 0.4% 1.0% LazyCompile: stringify native json.js:308 3796 0.3% 0.9% LazyCompile: ~b native v8natives.js:1582 3694 0.3% 0.8% Function: ~recursivePropertiesCollector C:\n\dev\SCNA\infra\lib\node-js\utils\object-utils.js:90 3599 0.3% 0.8% LazyCompile: *BasicSerializeArray native json.js:181 3578 0.3% 0.8% LazyCompile: *Buffer.write buffer.js:315 3157 0.3% 0.7% Stub: CEntryStub 2958 0.3% 0.7% LazyCompile: promise.promiseDispatch C:\n\dev\SCNA\runtime-environment\load-generator\node_modules\q\q.js:516 [JavaScript]: 勾选总非库名称 88414 7.9%20.1%lazycomile:*getUniqueId C:\n\dev\SCNA\infra\lib\node js\utils\general utils.js:16 22797 2.0%5.2%LazyCompile:*keys native v8natives.js:333 14524 1.3%3.3%lazycomile:Socket.\u flush C:\n\dev\SCNA\runtime environment\load generator\node\u modules\zmq\lib\index.js:365 12896 1.2%2.9%LazyCompile:BasicSerializeObject native json.js:244 12346 1.1%2.8%lazycomile:basicjson序列化本机json.js:274 9327 0.8%2.1%lazycomile:*C:\n\dev\SCNA\runtime environment\load generator\node\u modules\zmq\lib\index.js:194 7606 0.7%1.7%lazycomile:*解析原生json.js:55 5937 0.5%1.4%懒散编译:*拆分本机字符串。js:554 5138 0.5%1.2%lazycomile:*Socket.send C:\n\dev\SCNA\runtime environment\load generator\node\u modules\zmq\lib\index.js:346 4862 0.4%1.1%LazyCompile:*对本机数组进行排序。js:741 4806 0.4%1.1%LazyCompile:\u0.each.\u0.forEach C:\n\dev\SCNA\infra\node\u modules\下划线\下划线.js:76 4481 0.4%1.0%LazyCompile:~\u0.each.\u0.forEach C:\n\dev\SCNA\infra\node\u modules\下划线\下划线.js:76 4296 0.4%1.0%lazycomile:stringify native json.js:308 3796 0.3%0.9%lazycomile:~b native v8natives.js:1582 3694 0.3%0.8%函数:~recursivePropertiesCollector C:\n\dev\SCNA\infra\lib\node js\utils\object utils.js:90 3599 0.3%0.8%懒散编译:*BasicSerializeArray原生json.js:181 3578 0.3%0.8%懒散编译:*Buffer.write Buffer.js:315 3157 0.3%0.7%存根:CEntryStub 2958 0.3%0.7%lazycomile:promise.promiseDispatch C:\n\dev\SCNA\runtime environment\load generator\node\u modules\q\q.js:516 88414 7.9%lazycomile:*getUniqueId C:\n\dev\SCNA\infra\lib\node js\utils\general utils.js:16 88404 100.0%懒散编译:*generateId C:\n\dev\SCNA\infra\lib\node js\utils\general utils.js:51 88404 100.0%懒散编译:*注册C:\n\dev\SCNA\infra\lib\node js\events\pattern dispatcher.js:72 52703 59.6%懒散编译:*C:\n\dev\SCNA\runtime environment\load generator\lib\vuser driver\mdrv driver.js:216 52625 99.9%Lazycomile:*each.forEach.C:\n\dev\SCNA\runtime environment\load generator\node\u modules\下划线\下划线.js:76 52625 100.0%LazyCompile:~usingEventHandlerMapping C:\n\dev\SCNA\runtime environment\load generator\lib\vuser driver\mdrv driver.js:214 35555 40.2%LazyCompile:*once C:\n\dev\SCNA\infra\lib\node js\events\pattern dispatcher.js:88 29335 82.5%LazyCompile:~startAction C:\n\dev\SCNA\runtime environment\load generator\lib\vuser driver\mdrv driver.js:201 25687 87.6%LazyCompile:~onActionComplete C:\n\dev\SCNA\runtime environment\load generator\lib\vuser driver\mdrv logic.js:130 1908 6.5%懒散编译:~b native v8natives.js:1582 1667 5.7%LazyCompile:\u已完成C:\n\dev\SCNA\runtime environment\load generator\node\u modules\q\q.js:795 4645 13.1%LazyCompile:~终止C:\n\dev\SCNA\runtime environment\load generator\lib\vuser driver\mdrv driver.js:160 4645 100.0%LazyCompile:~终止C:\n\dev\SCNA\runtime environment\load generator\lib\vuser driver\mdrv logic.js:171 1047 2.9%LazyCompile:*startAction C:\n\dev\SCNA\runtime environment\load generator\lib\vuser driver\mdrv driver.js:201 1042 99.5%LazyCompile:~onActionComplete C:\n\dev\SCNA\runtime environment\load generator\lib\vuser driver\mdrv logic.js:130
事实上,您对编译代码实际花费的时间的假设是正确的:它需要毫秒(可以通过
--trace opt
标志看到)

现在,我们来谈谈这个
lazycomile
。这里引用了Vyacheslav Egorov(前v8开发人员)的一段话:

如果您使用的是V8的tick处理器,请记住LazyCompile: 前缀并不意味着这段时间花在编译器上,它只是 意味着函数本身是惰性编译的

函数名前的星号表示时间花在优化函数上,tilda——未优化

关于你关于一个函数被编译多少次的问题。交流电 88414 7.9% LazyCompile: *getUniqueId C:\n\dev\SCNA\infra\lib\node-js\utils\general-utils.js:16 88404 100.0% LazyCompile: *generateId C:\n\dev\SCNA\infra\lib\node-js\utils\general-utils.js:51 88404 100.0% LazyCompile: *register C:\n\dev\SCNA\infra\lib\node-js\events\pattern-dispatcher.js:72 52703 59.6% LazyCompile: * C:\n\dev\SCNA\runtime-environment\load-generator\lib\vuser-driver\mdrv-driver.js:216 52625 99.9% LazyCompile: *_.each._.forEach C:\n\dev\SCNA\runtime-environment\load-generator\node_modules\underscore\underscore.js:76 52625 100.0% LazyCompile: ~usingEventHandlerMapping C:\n\dev\SCNA\runtime-environment\load-generator\lib\vuser-driver\mdrv-driver.js:214 35555 40.2% LazyCompile: *once C:\n\dev\SCNA\infra\lib\node-js\events\pattern-dispatcher.js:88 29335 82.5% LazyCompile: ~startAction C:\n\dev\SCNA\runtime-environment\load-generator\lib\vuser-driver\mdrv-driver.js:201 25687 87.6% LazyCompile: ~onActionComplete C:\n\dev\SCNA\runtime-environment\load-generator\lib\vuser-driver\mdrv-logic.js:130 1908 6.5% LazyCompile: ~b native v8natives.js:1582 1667 5.7% LazyCompile: _fulfilled C:\n\dev\SCNA\runtime-environment\load-generator\node_modules\q\q.js:795 4645 13.1% LazyCompile: ~terminate C:\n\dev\SCNA\runtime-environment\load-generator\lib\vuser-driver\mdrv-driver.js:160 4645 100.0% LazyCompile: ~terminate C:\n\dev\SCNA\runtime-environment\load-generator\lib\vuser-driver\mdrv-logic.js:171 1047 2.9% LazyCompile: *startAction C:\n\dev\SCNA\runtime-environment\load-generator\lib\vuser-driver\mdrv-driver.js:201 1042 99.5% LazyCompile: ~onActionComplete C:\n\dev\SCNA\runtime-environment\load-generator\lib\vuser-driver\mdrv-logic.js:130