Node性能分析和排查

概要

本文主要简述通过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即可

方法二:

  1. npm全局安装包speedscope
npm i speedscope -g

2.运行以下命令将cpuprofile文件生成对应文件:

speedscope *.cpuprofile
1236A44C-DE0C-48a2-94F2-D197AA0D6CDE.png

3.用浏览器打开即可

方法三:接入alinode的CPU profile暂时没多做尝试。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容