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跟踪需要在事件循环的各个阶段处理的所有函数和回调。当您的服务器看到负载增加时,每个循环的任务数量开始增加。当此计数过高时,您的用户将开始看到响应时间的增加。好消息是扩大运行应用程序的进程数量通常可以缓解这种情况,并将您的网站性能恢复到正常水平
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。