nodejs性能调优--解决CPU占用过高问题

简介

Nodejs(服务端)的角度来看,JS本身的执行时间对服务的影响至关重要,如果执行时间从30ms降低到3ms,理论上QPS就能提升10倍,换句话说,以前要10台服务器才能扛住的流量现在1台服务器就能扛住,而且响应时间更短.

  • QPS:每秒查询率

方法1:Node 自带 profile

以–prof参数启动Node应用
node --prof [启动脚本]
通过压测工具loadtest向服务施压
loadtest  [http://127.0.0.1:6001] --rps 10
处理生成的log文件
node --prof-process [isolate-0XXXXXXXXXXX-v8-XXXX.log] > profile.txt
分析profile.txt文件
查看样本中运行的代码比例

Summary:
ticks total nonlib name
79 0.2% 0.2% JavaScript
36703 97.2% 99.2% C++
7 0.0% 0.0% GC
767 2.0% Shared libraries
215 0.6% Unaccounted

这告诉我们收集的所有样本中有97%发生在C ++代码中,当查看处理输出的其他部分时,我们应该最关注用C ++完成的工作(而不是JavaScript)

##### 分析语言中的哪些函数占用最多CPU信息
 [C++]

[C++]:
ticks total nonlib name
19557 51.8% 52.9% node::crypto::PBKDF2(v8::FunctionCallbackInfov8::Value const&)
4510 11.9% 12.2% _sha1_block_data_order
3165 8.4% 8.6% _malloc_zone_malloc

我们看到前三个条目占该程序占用CPU时间的72.1%。从这个输出中,我们立即看到至少51.8%的CPU时间被一个名为PBKDF2的函数占用

##### 分析堆栈,查看主要调用者信息
[Bottom up(heavy)profile]
```bash
ticks parent  name
  19557   51.8%  node::crypto::PBKDF2(v8::FunctionCallbackInfo<v8::Value> const&)
  19557  100.0%    v8::internal::Builtins::~Builtins()
  19557  100.0%      LazyCompile: ~pbkdf2 crypto.js:557:16

   4510   11.9%  _sha1_block_data_order
   4510  100.0%    LazyCompile: *pbkdf2 crypto.js:557:16
   4510  100.0%      LazyCompile: *exports.pbkdf2Sync crypto.js:552:30

   3165    8.4%  _malloc_zone_malloc
   3161   99.9%    LazyCompile: *pbkdf2 crypto.js:557:16
   3161  100.0%      LazyCompile: *exports.pbkdf2Sync crypto.js:552:30

 上一篇
Locust---压力测试快速上手 Locust---压力测试快速上手
资料开发者文档:https://docs.locust.io/en/stable/ 简介Locust是一款易于使用的分布式用户负载测试工具。它用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户。 特点 使用python编写
2019-02-19
下一篇 
正向代理和反向代理 正向代理和反向代理
参考文档: https://blog.csdn.net/u013451157/article/details/78858894 http://www.cnblogs.com/-abm/p/9894289.html#autoid-0-0-0
2018-12-07
  目录