translate from《Node.js Performance Monitoring – Part 1: The Metrics to Monitor》
在深入研究 Node.js 应用程序的性能以及如何进步性能时,有几个比拟外围的指标十分重要和有帮忙,让咱们从以下几个要害的指标来学习剖析 Node.js 的性能。
【cpu usage】
Node 利用个别不会耗费很多的 CPU,如果有高 CPU 那么阐明你的 app 有很多同步操作。而他们会 block 事件循环,这会导致你的异步工作回调也被阻止了。
而 CPU 使用率高的程序不肯定是谬误的程序,如果你要在一个 web-server 里运行一个 cpu 密集型的程序,这个工作最好是放到一个独自过程里,否则它会让你的服务变得异样迟缓影响你的用户。找到引起 cpu 升高的问题,是理解 node 应用程序的良好开端。
【堆内存应用、内存透露、垃圾收集】
Node.js 对内存有一个独特的限度 – 一个过程的最大堆容量为 1.5GB(cyj 注: 这个应该跟机器 cpu 架构无关),无论运行该过程的机器上有多少可用内存。理解这一点对于架构设计和测试你的利用至关重要。
内存透露是 Node.js 中的常见问题,并且是在对象被援用太长时引起的 – 换句话说,一个变量即便不再须要了但还是存储着它的援用。失常状况下,垃圾收集器会开释不被应用的内存,以释放出来给利用持续应用。然而,垃圾收集器无奈开释这些在过期日期之后挂起的变量所应用的内存。如果您的应用程序内存使用量稳步增长而不是通过垃圾回收周期性地缩小,那么您可能会遇到内存透露问题
【事件循环的滞后 Lag in EventLoop】
Node.js 的外围劣势之一就是速度快。它被构建为疾速和异步地解决多个事件. 这种劣势来自事件循环,它容许应用程序疾速响应这些事件。在优化应用程序以进步速度时,理解事件循环减慢的工夫和起因十分重要。随着事件循环的每个循环变慢,每个事件将破费更长的工夫来解决和操作。从性能上讲,这能够将 Node.js 升高到无响应的水平。
一些拖慢事件循环的 case:
- 长时间运行的同步工作
在事件循环的单个滴答中破费太多工夫也可能是性能问题的本源。您无奈打消工作执行 cpu 所消耗的工夫,但咱们须要留神在任何给定工夫内破费的工夫。如果工作工夫超过咱们可承受的响应工夫,那么在不同的过程中执行该工作可能是有意义的。
- 每个循环的工作一直减少
Node.js 跟踪须要在事件循环的各个阶段解决的所有函数和回调。当您的服务器看到负载减少时,每个循环的工作数量开始减少。当此计数过高时,您的用户将开始看到响应工夫的减少。好消息是扩充运行应用程序的过程数量通常能够缓解这种状况,并将您的网站性能复原到失常程度