我正在运行nodejs 4.4.7 LTS
我运行分析器,如下所示,https://nodejs.org/en/docs/guides/simple-profiling/:
node --prof app.js
然后:
node --prof-process isolate-something-v8.log > processed.txt
我是不是漏掉了什么东西?
守则是关于什么的:
NodeJS应用程序是socket.io服务器将数据从网络发送到C++应用程序和恶意软件。
从下面的结果可以看出,这里有大量的下落不明的变量。在这种情况下,是什么导致了这种情况,以及如何知道我的应用程序的瓶颈是什么?什么是解决办法?
Code move event for unknown code: 0x61047523c0
Code move event for unknown code: 0x6104bf74a0
Statistical profiling result from isolate-000001E1507CF2D0-v8.log, (211705 ticks, 210634 unaccounted, 0 excluded).
[Shared libraries]:
ticks total nonlib name
[JavaScript]:
ticks total nonlib name
71 0.0% 0.0% LazyCompile: *stringToBuffer *SOMETHING*\socket.io\node_modules\engine.io\node_modules\engine.io-parser\lib\index.js:359:24
59 0.0% 0.0% LazyCompile: listOnTimeout timers.js:56:23
50 0.0% 0.0% LazyCompile: *wrapper timers.js:274:19
43 0.0% 0.0% Stub: StringAddStub_CheckNone_NotTenured
.
.
.
[C++]:
ticks total nonlib name
[Summary]:
ticks total nonlib name
1071 0.5% 0.5% JavaScript
0 0.0% 0.0% C++
202 0.1% 0.1% GC
0 0.0% Shared libraries
210634 99.5% Unaccounted
[C++ entry points]:
ticks cpp total name
[Bottom up (heavy) profile]:
Note: percentage shows a share of a particular caller in the total
amount of its parent calls.
Callers occupying less than 2.0% are not shown.
ticks parent name
210634 99.5% UNKNOWN
发布于 2018-05-22 12:26:49
随时更新您正在使用的任何软件的最新稳定版本,Node.js 4.4.7已经有两年的历史了。
Mike在"Node.js -两个臭虫的故事“中的博客:
“使用完全相同版本的Node.js运行这两个命令非常重要。 不幸的是,当我试图对单个文件进行概要转换(执行时间大约增加了100% )时,Node.js 7.x和v8.0.0-test201511830c4bf319几乎一直显示为下落不明:. 在耗尽了我的Node.js调试技能之后,我问我能做些什么来尝试产生一个最小的测试用例,以及是否有任何主要的反模式会导致Node.js 7和8中的性能更差。 在这个阶段,我确信问题要么在于ajv (用于在swagger2openapi中验证JSON模式的库),要么在于should.js (我正在使用的BDD测试/断言库)。
Ben还指出,以下命令将提供更深入的分析信息,特别是哪些函数被取消优化,以及原因:
$ node8 --trace_opt --trace_deopt swagger2openapi petstore.json
这指向should.js中的两行:
;;; deoptimize at <D:\nodejs\swagger2openapi\node_modules\should\cjs\should.js:152:14>, no cache
;;; deoptimize at <D:\nodejs\swagger2openapi\node_modules\should\cjs\should.js:68:14>, no cache
这有助于缩小范围,我很快就想出了一个最小的测试用例,它显示了退步的行为。
var should = require('should'); //11.2.0
for (var i=0;i<10000;i++) {
i.should.not.be.type('string');
}
Node.js的撰稿人安娜·亨宁森( Anna )报告说,这是可以复制的。 ..。 他还提议尝试将修复程序移植到v8 6.0中,以便将其包含在Node.js的当前发布流中。然而,这一努力似乎已经停滞,但好消息是,修补程序已经出现在Node.js 9.0的夜间版本中,其中包括v8 6.1。 该计划是发布Node.js 8.7和v8 6.1,这应该解决了我所有的问题,但是,在Node.js 8.7中必须禁用的v8逃逸分析已经发现了一个问题--这可能会使这个版本没有我所希望的那么快。从v8 6.2获得的修复是否会在其进行LTS (长期支持)之前将其转换为Node.js 8.x仍然是一个猜测问题,但我留给您的是我的Node.js 6.11.4、8.6.0、8.7.0和9.0.0用例的比较时间。 ..。 如果您在开发环境中使用基于异常的断言工具,或者依赖于抛出的错误堆栈跟踪的任何性能关键代码,或者只是想知道自Node.js 6.x以来性能如何,那么您肯定应该考虑升级到Node.js 8.7。
我以前和gcc有过类似的问题,不知道,也没有深入到共享库中,我用详细的调试(-ggdb IIRC)重新编译了我的整个工具链,这样我就可以看到一切。剥离容易去除多余的。这个特定的解决方案对于me是有用的,因为我参与了测试和错误报告,这对普通用户可能没有用,尽管拥有一个工具链的多个版本是非常容易的。
https://stackoverflow.com/questions/38145769
复制相似问题