手机版

优化Node.js代码的三种未知方法

时间:2021-09-17 来源:互联网 编辑:宝哥软件园 浏览:

Node.js程序的运行可能会受到CPU或输入输出操作的限制,这使得它非常慢。从中央处理器的角度来看,程序运行缓慢的一个典型原因是未优化的“热点路径”(一段频繁访问的代码)。从输入输出的角度来看,程序运行速度的限制可能是受到底层操作系统的影响,也可能是Node本身的故障。或者,运行缓慢的程序可能与节点本身无关。问题是外部资源,比如数据库查询或者API调用,速度慢,没有优化。

在本文中,我们将重点确定和优化代码库中会导致CPU运行困难的操作。同时还会讨论生产应用的配置文件,分析做出可以提高运行效率的变更。

由于Node的单线程特性,避免CPU负载过重对服务器来说尤为重要。因为花在CPU上的时间会占用响应其他请求的时间。如果您注意到您的应用程序响应缓慢,并且在此过程中CPU利用率始终很高,那么分析您的程序将有助于找出瓶颈,并将程序恢复到快速运行状态。

分析应用程序复制生产环境中的慢程序是非常困难和耗时的。谢天谢地,你不需要自己做这件事。您可以在生产服务器上收集配置文件数据并离线分析。我们来看看几种分析方法。

1.使用内核级工具。首先,您可以使用内核级工具,如DTrace(Solaris,BSD)、perf(Linux)或XPerf(Windows),从正在运行的进程中收集堆栈跟踪信息,然后生成火焰图。内核级分析对运行过程的影响最小。火焰图是根据调用栈生成的矢量图,支持放大和缩小查看。来自的肖就Linux系统中的perf做了精彩的演讲和推文,帮助大家加深了对这项技术的理解。如果想在生产过程中保持高的吞吐量,可以参考这个方法。

2、

2.使用V8分析仪的另一种选择是直接使用V8分析仪。这种方法会与程序共享进程,因此会影响程序的性能。因此,当您遇到此类问题时,请仅运行V8分析器来捕获相关输出。这种方法的优点是可以使用Chrome的所有分析工具,并结合其输出结果(包括火焰图)来调查程序。

请运行以下代码来测试您的程序:

npm安装v8-profiler - save后,将以下代码添加到您的程序中:

const profiler=require(' V8-profiler ')const fs=require(' fs ')var profiler running=false function toggleProfiling(){ if(profiler running){ const profile=profiler . stopperofiling(). console . log('已停止分析')profile.export()。管道(fs.createWriteStream(')。/myapp-“date . now()”。cpuprofile’)。一次('错误',profiler.deleteAllProfiles)。一次(' finish ',profiler . deletelprofiles)profiler running=false返回} profiler . startprofiling()profiler running=true console . log(' started profiling ')}进程。on ('SIGUSR2 ',切换剖析)只要你向这个进程发送SIGUSR2信号,它就会开始分析。再次发送SIGUSR2信号可以停止分析(代码如下)。

Kill -SIGUSR2 [pid]这个过程的分析结果会写入当前工作路径的文件中(请确保路径可以写入)。由于这是一个可编程接口,你可以随意触发(使用web endpoint、IPC等)。).如果你有预感程序什么时候会变慢,可以随时触发界面。建立自动触发对于避免连续监控程序非常有用,但它需要您对捕获时间和捕获持续时间有一个预测性的了解。

一旦收集了概要文件数据,将其加载到Chrome开发工具中并开始分析它!

3.使用流程管理器虽然直接使用V8 analyzer非常有效且可定制,但它将进入您的代码库,并向项目添加另一个您可能不想要的依赖条件。另一种方法是使用process manager,当您需要分析程序时,它可以用各种工具打包您的程序。一个可选工具是来自StrongLoop的SLC命令行工具。

首先,运行NPM安装strong loopg,然后运行以下代码:

Slc start [/path/to/app]以上代码将在进程管理器中启动您的程序,您可以根据需要提取CPU分析数据。要验证并获取应用程序id,请运行:

Slc ctl,您将获得类似以下的运行结果:

服务ID:服务名称: my-sleep-appEnvironment变量:名称值NODE _ ENV production instance :版本代理版本Debugge r版本群集大小驱动程序元数据5 . 0 . 1 2 . 0 . 2 1 . 0 . 0 1N/a进程ID : PID WID侦听端口跟踪对象?CPU剖析?追踪?调试?1 . 1 . 61022 61022 01 . 1 . 61023 61023 10 . 0 . 0 . 033603000定位申请流程id。在本例中,id是1.1.61023。现在我们可以随时开始分析,只需运行以下代码:

Slc ctl cpu-start 1.1.61023当我们感觉已经捕获到滞后行为时,我们可以运行以下代码来停止分析器:

以下代码将把文件写入硬盘:

Cpu配置文件写到' node.1.1.61023.cpu配置文件',加载到chrome dev tools,就是这样。您可以像在V8分析器中一样将文件加载到Chrome中进行进一步分析。

做出正确的决定在本文中,作者展示了在Node中捕获生产环境中CPU使用情况的三种方法。那么,你应该选择哪一个呢?以下是一些帮助你缩小决策范围的想法:

我需要分析很长时间:使用内核级工具。我想用Chrome开发工具:用V8分析器或者进程管理器。我想捕捉应用程序中的特定行为:使用V8分析器。不想影响程序性能:希望不需要用内核级程序逐个测试文件获取程序分析信息;使用流程管理器是本文的全部内容,优化Node.js代码有三种方法,希望大家熟练掌握。

版权声明:优化Node.js代码的三种未知方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。