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监控信息
4.问题分析
问题火焰图
抽样指标:30s
分析
如图所示,问题点在于左下角中GC时间是总时间占比的大约20%
通过代码走查发现,程序在截取借口uri的时候没把参数去除,导致在内存中频繁生成对象,导致频繁GC。
优化后
优化后火焰图
抽样指标:30s
分析
明显看到左下角的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