我有兴趣分析我的Node.js应用程序。我用--prof
旗子开始了它,并且获得了一个v8.log
文件。我已经采用了windows-tick处理器,并获得了一个据说是人类可读的分析日志。问题的底部是一些从日志文件中摘录的小节,我完全无法理解。
我得到了ticks统计方法。我不明白total
VS的nonlib
意思。此外,我不明白为什么有些事情的前缀LazyCompile
,Function
,Stub
或其他条款。
我希望得到的最佳答案是刻度处理器输出格式的完整文档/指南,完整地解释每个术语,结构等。
除此之外,我只是不明白懒编译是什么。它是编译?是不是每个函数都只编译一次?那么编译如何成为我的应用程序执行的重要部分?应用程序运行几个小时来生成这个日志,我假设内部JavaScript编译需要几毫秒。这表明懒惰编译是每个函数不会发生的事情,但是在某种代码评估过程中会发生?这是否意味着无处不在我有一个函数定义(例如嵌套函数),内部函数每次都会“延迟编译”?
我无法在任何地方找到任何信息,并且我一直在Google上搜索...
我也意识到有很多profiler标志。有关这些的其他参考也是受欢迎的。
[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
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
发布于 2018-04-10 13:11:59
事实上,你对编译代码所花时间的假设是正确的:它需要几毫秒(这可以用--trace-opt
标志来看)
函数名称前面的星号表示时间花费在优化函数中,tilda - 未优化。
关于一个函数被编译多少次的问题。实际上,JIT(所谓的full-codegen)在第一次执行时会为每个函数创建一个非优化版本。但稍后可能会发生任意(某种程度上)数量或重新编译(由于优化和纾困)。但是在这种分析日志中你不会看到它。
Stub
前缀尽我所能理解意味着执行是在一个C-Stub内部的,它是运行时的一部分,并与引擎的其他部分一起编译(即它不是JIT编译的JS代码)。
total
与nonlib
:
这些列仅仅意味着总共/非lib时间的x%花在那里。
https://stackoverflow.com/questions/-100008040
复制相似问题