概要
本文主要简述通过V8自带的程序启动选项进行Node性能测试
V8程序启动选项:
- max-stack-size 设置栈大小
- v8-options 打印 V8 相关命令
- trace-bailout 查找不能被优化的函数,重写
- trace-deopt 查找不能优化的函数
- trace-gc GC回收日志
- prof Profile日志
- ...
分析GC日志
- 在启动程序的时候添加 --trace_gc 参数,V8 在进行垃圾回收的时候,会将垃圾回收的信息打印出来
node --trace_gc app.js
内存泄漏排查
通常来说,内存泄漏容易发生在闭包等场景下。针对内存泄漏的调试,可以使用如下命令:
node --trace_gc --trace_gc_verbose app.js
Profile分析
通过 Profile 可以找到具体函数在整个程序中的执行时间和执行时间占比,从而分析到具体的代码问题,V8也提供了Profile日志导出命令
1、prof 提供各个函数的执行占比:
node --prof app.js
执行命令之后,会在该目录下产生一个*-v8.log的日志文件,处理V8 分析器的输出可以采用命令prof-process
node --prof-process isolate-0XXXXXXXXXXX-v8-XXXX.log > profile.txt
2、cpu-prof 包括更加完整的调用栈,可读性更强
node --cpu-prof app.js
方法一:Chrome分析
Chrome自带了分析CPU Profile日志的工具。打开 Chrome -> 调出开发者工具(DevTools) -> 单击右上角三个点的按钮 -> More tools -> JavaScript Profiler -> Load,加载刚才生成的Cpuprofile文件。
方法二:火焰图
个人倾向于speedscope模块,对于Node官方火焰图暂时还没研究透
方法一 :
打开地址https://www.speedscope.app,载入生成的*.cpuprofile即可
方法二:
- npm全局安装包speedscope
npm i speedscope -g
2.运行以下命令将cpuprofile文件生成对应文件:
speedscope *.cpuprofile
3.用浏览器打开即可