Node服务器性能分析调优debug

news2024/12/24 10:09:54

node其实自带提供了性能分析工具:node --profile
但是它分析起来并不是很好用,于是chrome提供了另一种分析和debug工具:Chrome devtool
使用这个工具我们可以分析自己的Node项目调用堆栈里耗时较长的任务,对应去做缓存或者异步调用优化;还可以打断点debug我们的项目。本文就是来介绍一下怎么使用Chrome devtool的性能分析工具的。

为了使优化和测试效果更加明显,建议可以先安装一个apache提供的压测工具:ab。这样可以在大量请求下看到调用情况。
注意是每个平台都有不同的版本,看自己的操作系统寻找安装教程即可。
windows安装ab压测:https://www.jianshu.com/p/2d0a068396cd

使用方法

node --prof

参考:https://blog.csdn.net/m0_53754897/article/details/125308930

  1. 打开项目,一般我们的项目启动命令都是node index.js等等,反正是用node启动的,那么开启性能分析检测就在中间加一个 –prof的参数。开启一个正常运行的本地环境。
  2. 这样就会在项目目录下生成一个 isolate-xxxxxx.log的文件(如果没有设置路径的话,默认是项目目录下)其实这个文件下的文字都是在描述调用了什么堆栈,方法之类的,就是看起来太复杂。
  3. 所以我们跳过这个命令,去看chrome提供的可视化devtool工具。

Chrome devtool

  1. 与上面的命令类似,开启这个工具只需要在参数上增加**–inspect-brk**这样的属性,类似于 node --inspect-brk index.js这样的命令,就可以生成检测入口链接,如下图生成了一个websoket链接。
    –inspect 不会中断,–inspect-brk 在用户代码启动之前会中断,也就是代码在第一行就会暂停执行。
    在这里插入图片描述

  2. 打开chrome的devtool网址chrome://inspect/#devices,就可以看到远端扫描到的entry,点进去inspect。source里可以看到我们的服务器代码,这时通过source边上的这个开始箭头开启项目,意味着开始debug,在本页面调用接口,可以看到在打开的chrome devtool console里像是平时在客户端一样出现console信息。
    看了一些文章说使用nodemon也可以用这个参数调试,我试了一下不行,大家可以自己也试一下。

在这里插入图片描述
在这里插入图片描述
3. debug可以在vscode内加debugger,也可以直接在devtool里的source里加。在这里加console的断点之后,再访问接口会发现被阻断。

调试分析性能

常见ab压测命令:

options.

-n 请求数量
-c 并发数
-t 测试所进行的最大秒数。
-H 请求头
-p POST请求的请求数据
-T post数据所使用的Content-Type头信息,例如 -T ‘application/x-www-form-urlencoded’

GET

e.g :
// 注意 如果需要携带参数必须把url用引号引起来 不然识别不到&
ab -n 10000 -c 10 -H “Cookie:123” “https://test.com?a=1&b=2”

POST

ab -n 100 -c 10 -p ‘post.txt’ -T ‘application/x-www-form-urlencoded’

  1. 首先打开memory栏目,生成一个快照。
  2. 打开performance栏目开启测试,开始跑ab的压测命令,对自己的某一个接口压测:ab -n 600 -c 15 “https://test.com?a=1&b=2”设定并发数15请求量600。
  3. 可以看到ab生成了一个简单报告,主要看下这个QPS意思是每秒钟我们这个接口可以承载344个请求左右。
  4. 然后打开performance、Memory看下调用栈情况,Memory记得再生成一个快照。
  5. 打开performance,看这里,首先看到第一行pool.query,就猜测可能是sql查询的方法,点开调用栈往下看,可以看到文件路径和调用方法,然后跟着内部去尝试优化,其他的调用栈情况也是一样的。

一般来说我们的分析调优看的两点:是否内存泄漏、是否某个方法调用耗时太长,通常的解决方法也是两种:找到内存泄漏的原因予以解决,耗时太长的方法进行数据缓存或者改成异步等其他方式优化。

在这里插入图片描述

查看内存使用情况,分析是否内存泄漏问题

如果有内存泄漏问题,随着时间推移服务器无法被回收的内存越占越多影响服务器性能。

同样使用ab压测,这时需要注意,开始之前生成一个快照,中间生成一个快照,结束时生成一个快照。

查看快照时的内存占用,是否执行前后的内存占用一致,中间执行时占用高,结束后回落。看这里可以比较两个快照之间的值变化,按照Size从上往下看,额,目前这个项目太简单,看不出内存问题。

手动制造一下内存泄漏的情况。再跑一下看看。
在这里插入图片描述
类似于下图,可以明显看到结束之后内存占用10m,比起开始时候多了1M多,而这我们才跑了600多个请求。打开对比,按照大小排序,可以一个个看,前面的基本看不懂,直到string,往下翻全是我们存起来的数据,这些数据一直没有释放。
就对着这里进行优化即可。
在这里插入图片描述

计算性能优化的本质:

  • 减少不必要的计算
  • 空间换时间

Node.js HTTP服务性能优化方案:提前计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1482124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day10:基础入门-HTTP数据包Postman构造请求方法请求头修改状态码判断

目录 数据-方法&头部&状态码 案例-文件探针 案例-登录爆破 工具-Postman自构造使用 思维导图 章节知识点: 应用架构:Web/APP/云应用/三方服务/负载均衡等 安全产品:CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令:文件…

Facebook广告账户被封的可能原因及应如何避免?

Facebook作为全球最大的社交平台,是众多出海企业和广告主的推广渠道。但不少广告主在使用Facebook广告账户推广时,因各种原因导致账户被封,不仅影响了业务进程,更是给广告主带来了经济损失。 账户被封邮件如下: 以下是…

Dell R730 2U服务器实践2:VMWare ESXi安装

缘起 刚到手边的一台Dell R730是三块硬盘raid0 ,把我惊出一身冷汗,准备把它们改组成raid1 或者raid5 。 但是舍不得里面的ESXi 8 ,寻找能否把raid0改成raid1 还不掉WSXi的方法,很遗憾没有找到。那样只能重装ESXi了。 ESXi软件下…

Python 画 箱线图

Python 画 箱线图 flyfish 箱线图 其他名字 盒须图 / 箱形图 横向用正态分布看 垂直看 pandas画 import pandas as pdimport seaborn as sns import matplotlib.pyplot as plt import pandas as pddf pd.read_csv(sh300.csv) print("原始数据") print(df.he…

【JVM】聊聊常见的JVM排查工具

JDK工具包 jps 虚拟机进程状况工具 jps是虚拟机进程状况工具,列出正在运行的虚拟机进程,使用 Windows 的任务管理器或 UNIX 的 ps 命令也可以查询,但如果同时启动多个进程,必须依赖 jps。jps -l 显示类名 jps :列出Java程序进程…

循环简介和基本运算符

根据C Primer Plus第五章进行学习 文章目录 循环简介基本运算符 1.赋值运算符&#xff1a;2.加法运算符&#xff1a;3.减法运算符&#xff1a;-2.乘法运算符&#xff1a;*总结 1.循环简介 如下代码可以体现不使用循环的局限性&#xff1a; #include<stdio.h> #define AD…

云天励飞战略投资神州云海,布局机器人市场

日前,AI上市企业云天励飞(688343.SH)完成了对深圳市神州云海智能科技有限公司(以下简称“神州云海”)的B轮战略投资。 公开资料显示,自2015年于深圳创立以来,神州云海始终聚焦人工智能与服务机器人广阔的应用市场,依托自主的核心算法能力,深耕机器人硬件本体研发,整合上下游产…

【机器学习300问】25、常见的模型评估指标有哪些?

模型除了从数据划分的角度来评估&#xff0c;我上一篇文章介绍了数据集划分的角度&#xff1a; 【机器学习300问】24、模型评估的常见方法有哪些&#xff1f;http://t.csdnimg.cn/LRyEt 还可以从一些指标的角度来评估&#xff0c;这篇文章就带大家从两个最经典的任务场景介绍…

微信云开发-- Mac安装 wx-server-sdk依赖

第一次上传部署云函数时&#xff0c;会提示安装依赖wx-server-sdk 一. 判断是否安装wx-server-sdk依赖 先创建一个云函数&#xff0c;然后检查云函数目录。 如果云函数目录下只显示如下图所示三个文件&#xff0c;说明未安装依赖。 如果云函数目录下显示如下图所示四个文件&a…

数电实验之流水灯、序列发生器

最近又用到了数电实验设计的一些操作和设计思想&#xff0c;遂整理之。 广告流水灯 实验内容 用触发器、组合函数器件和门电路设计一个广告流水灯&#xff0c;该流水灯由 8 个 LED 组成&#xff0c;工作时始终为 1 暗 7 亮&#xff0c;且这一个暗灯循环右移。 1) 写出设计过…

吴恩达机器学习笔记:第5周-9 神经网络的学习(Neural Networks: Learning)

目录 9.1 代价函数 9.1 代价函数 首先引入一些便于稍后讨论的新标记方法&#xff1a; 假设神经网络的训练样本有&#x1d45a;个&#xff0c;每个包含一组输入&#x1d465;和一组输出信号&#x1d466;&#xff0c;&#x1d43f;表示神经网络层数&#xff0c;&#x1d446;&…

babylonjs入门-半球光

基于babylonjs封装的一些功能和插件 &#xff0c;希望有更多的小伙伴一起玩babylonjs&#xff1b; 欢迎加群&#xff08;点击群号传送&#xff09;&#xff1a;464146715 官方文档 中文文档 案例传送门 懒得打字 粘贴复制 一气呵成

kubectl 陈述式资源管理方法

目录 陈述式资源管理方法 项目的生命周期 1.创建kubectl create命令 2.发布kubectl expose命令 service的4的基本类型 查看pod网络状态详细信息和 Service暴露的端口 查看关联后端的节点 ​编辑 查看 service 的描述信息 ​编辑在 node01 节点上操作&#xff0c;查看…

3.1 IO进程线程

使用fwrite、fread将一张随意的bmp图片&#xff0c;修改成德国的国旗 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, const char *argv[]) {FILE* fp fopen("./2.bmp","r&quo…

用 deforum 来演绎 2024 年的 AI PC:《赛博朋克狂想曲》

想象一下&#xff0c;你不只是坐在屏幕前&#xff0c;还能 “跳” 进去&#xff01;&#xff01;这是只有身处 AI 流行文化时代之下的我们&#xff0c;才能感受到的独特风格。 作者 947&#xff1a; “ 我想通过这个视频&#xff0c;不只是让大家看到一个充满科技的世界&#x…

Java求职技能清单(2024版)

一、Java基础扎实&#xff08;反射、集合、IO、NIO、多线程、设计模式、通信协议等基础技术&#xff09; &#xff08;一&#xff09;Java &#xff08;二&#xff09;网络IO &#xff08;三&#xff09;NIO模型 &#xff08;…

每日leetcode--最大数

正题之前 三玖yyds&#xff01;&#xff01;&#xff01; 题目 给定一组非负整数 nums&#xff0c;重新排列每个数的顺序&#xff08;每个数不可拆分&#xff09;使之组成一个最大的整数。 注意&#xff1a;输出结果可能非常大&#xff0c;所以你需要返回一个字符串而不是整…

ubuntu22.04安裝mysql8.0

官网下载mysql&#xff1a;MySQL :: Download MySQL Community Server 将mysql-server_8.0.20-2ubuntu20.04_amd64.deb-bundle.tar上传到/usr/local/src #解压压缩文件 tar -xvf mysql-server_8.0.20-2ubuntu20.04_amd64.deb-bundle.tar解压依赖包依次输入命令 sudo dpkg -i m…

string【基础篇】

1.1string字符串类 注意&#xff1a;这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列&#xff0c;这个 类的所有成员(如长度或大小)以及它的迭代器&#xff0c;将仍然按照字节(而不是实际编码的字符)来操作。 总结&#xff1a; string是表…

基于阿里云平台 通过树莓派实现 1:1人脸识别

之前的学习中&#xff0c;曾经在香橙派上使用阿里云平台的服务实现过类型识别&#xff1a; 使用香橙派并基于Linux实现最终版智能垃圾桶项目 --- 下_香橙派 项目-CSDN博客 现在&#xff0c;尝试在树莓派上通过阿里云平台的服务实现人脸识别&#xff01; 通过VScode远程连接树莓…