Node-如何定位CPU性能问题

介绍Nodejs如何定位CPU性能问题。

Let‘s Go!


1.解决方案

  • 使用easymonitor生成火焰图定位问题的方法堆栈并对其进行优化。

2.场景

在程序使用某个包/类库之后,出现高CPU使用率,高延迟。

程序QPS:1

3.问题现象

如下图所示,3.14 21:00 发布第一次发布,之后重启过两次。

第一次:3.15 10:00,在此次重启时没意识到根本原因。

第二次:3.16 14:00,与此同时去除饮用的类库。

CPU监控信息

cpuidle

4.问题分析

问题火焰图

抽样指标:30s

before

分析

如图所示,问题点在于左下角中GC时间是总时间占比的大约20%

通过代码走查发现,程序在截取借口uri的时候没把参数去除,导致在内存中频繁生成对象,导致频繁GC。

优化后

优化后火焰图

抽样指标:30s

after

分析

明显看到左下角的GC时间大幅度减少。

详见:https://github.com/SkyAPM/SkyAPM-nodejs/pull/71/files

参考

SkyAPM-Nodejs:https://github.com/SkyAPM/SkyAPM-nodejs/issues/72

Written on March 21, 2019