node

Node 性能优化与问题排查

published on
服务性能指标 吞吐量 是否存在内存泄露 吞吐量 QPS (TPS) 每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,通常用来表达和衡量当前系统的负载 并发数 系统同时处理的request/事务数 响应时间 一般取平均响应时间 关系 QPS = 并发量 / 平均响应时间 一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达 到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下 降! 如果想要提高系统吞吐量,就需要先进行性能测试,测出系统极限,然后再进行性能调优。 使用 JMeter 进行性能测试 Apache JMeter - Download Apache JMeter 下载jmeter,然后解压到任意目录,执行bin文件夹下的 jmeter.sh在出现的UI界面上进行对你的node 服务进行相应测试,具体如何测试可以Google。可以测出程序的吞吐量。 内存泄露 内存泄漏(Memory Leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。 如果一个程序存在内存泄露,则随着时间的推移,内存占用越来越来,程序也就会越来越卡,导致系统性能下降,吞吐量下降,因此如果发现你的程序越来越慢,那可能存在内存泄露问题。 性能优化 heapdump或使用 v8-profiler 这两个工具的原理都是一致的:调用v8引擎暴露的接口: v8::Isolate::GetCurrent()->GetHeapProfiler()->TakeHeapSnapshot(title, control) 然后将获取的c++对象数据转换为js对象。 这里推荐使用v8-profiler因为多一个cpu快照功能 node-inspector/v8-profiler 快照 我们为程序添加一个进行快照的路由,在服务一开始运行的时候开始CPU分析并进行第一次堆快照,方便后面对比,服务端接受到这个Get请求时,进行停止分析,并进行堆快照和CPU快照,保存快照文件。 const router = require('koa-router')(); const fs = require('fs'); const profiler = require('v8-profiler'); profiler.startProfiling(); const snapshot1 = profiler. Read More...