Node.js 性能平台运行时与社区 Node.js 运行时是什么关系
-
Node.js 性能平台运行时完全兼容社区对应版本 Node.js 运行时,对应关系 请查看 。
Node.js 性能平台运行时是否会影响性能
-
Node.js 性能平台运行时每分钟在主线程将监控数据写到内存中,通过额外的日志线程写日志到文件,因此对性能影响可以忽略。
-
做故障诊断时,执行诊断功能 3 分钟,随后自动切回到正常运行状态。
Node.js 性能平台运行时提供了哪些额外的功能
-
Node.js 虚拟机 V8 的运行时内存状态监控;
-
libuv 运行时状态监控;
-
在线故障诊断功能:堆快照、CPU Profile、GC Trace 等。
部署 Node.js 性能平台运行时后控制台显示实例数为 0
-
step 1 查看 agenthub 是否启动成功,通过如下命令查看是否有 agenthub 实例运行。
u@h:~$ agenthub list |- App ID -|- PID -|---- Start Time -----|--- Config Path ------------------------------------| | 12345 | 29015 | 2018-07-11 16:53:44 | /path/to/your/config.json | |----------|-------|---------------------|----------------------------------------------------| u@h:~$
如果没有运行中的 agenthub,可以通过 DEBUG 方式启动 agenthub 后查看 ~/.agenthub.log 日志查看具体出错信息。
DEBUG=* agenthub start config.json cat ~/.agenthub.log
-
step 2 查看 agenthub 的配置,通过
实例
页面上的查看运行中的Node.js进程
后点击检查进程
。
诊断操作提示失败
所有诊断操作需要顺序执行。一个操作未完成时进行下一个操作会提示操作失败。文件页面转储按钮有效时表明操作已完成(诊断报告数秒可完成,堆快照根据堆大小可能数秒到数分钟,其他操作持续时间为 3 分钟)。
agenthub 异常退出
通过
agenthub start config.json
启动 agenthub 后,
agenthub list
无法获得 agenthub 实例。那么通过 DEBUG 方式启动agenthub
DEBUG=* agenthub start config.json
然后查看 ~/.agenthub.log 获取出错信息。
修复错误后,重新普通方式启动agenthub。
agenthub stop all # 停止 agenthub
agenthub start config.json
如何处理一台服务器部署多个应用
强烈建议每台服务器部署一种应用。
如果必须要在同一台服务器部署多个应用:
-
每个应用申请不同的
App Id
和App Secret
,用NODE_LOG_DIR
指定不同的路径存放运行时日志,并且与config.json
里面logdir
路径一致。这样可以启动多个 agenthub。或者; -
启动一个 agenthub,所有应用的运行时日志指向相同目录(默认
/tmp
),error_log
和packages
可以放到配置文件的数组里面。
使用 pm2 管理的应用如何使用 Node.js 性能平台运行时
-
如果安装 Node.js 性能平台运行时前系统已经安装社区 Node.js 运行时和 pm2 :
-
安装 Node.js 性能平台运行时后重新安装 pm2,确保
which pm2
结果中包含.tnvm
字段; -
将 pm2 所有进程杀掉,尤其是其守护进程
PM2 v0.15.8: God Daemon
不能漏掉; -
重新用 pm2 启动应用。
$ ENABLE_NODE_LOG=YES pm2 start app.js
-
-
如果安装 Node.js 性能平台运行时前系统未安装社区 Node.js 运行时和 pm2 :
-
安装 pm2 后直接使用 pm2 启动应用
$ ENABLE_NODE_LOG=YES pm2 start app.js
-
控制台只有系统监控数据,没有进程监控数据
通过
实例
页面上的
查看运行中的Node.js进程
后点击
检查进程
进行排查。
多个实例的 hostname 相同如何处理
在配置文件中添加配置项
"agentidMode": "IP"
。
例如有两个实例的
hostname
都是
app_container
,
IP
分别是
10.10.12.124
和
10.10.12.123
,如果配置中增加
"agentidMode": "IP"
,那么两个实例ID分别是
app_container_12124
和
app_container_12123
。
细节请参考
。
慢 HTTP 日志是什么
-
响应时间 (RT) 大于 400ms 的 HTTP 请求。
异常日志是什么
-
在
config.json
里面中配置的error_log
所指定的日志文件中带error stack
的日志,该日志由用户应用生成。
模块依赖是什么
-
在
config.json
里面中配置的packages
所指定的 npm 模块,用红色提示存在安全风险的模块。
系统监控数据各项指标什么含义
基本信息
最近一次日志上报的各项指标,具体指标含义如下所述。
长周期数据
Memory
-
memory_sys
:系统内存使用百分比。 -
memory_node
: 所有 Node.js 进程内存使用之和占系统内存的百分比。
CPU
-
cpu_sys
:系统 CPU 使用百分比。 -
cpu_node
:所有 Node.js 进程 CPU 使用百分比之和。
Load
-
load1
:1分钟内平均 Load。 -
load5
:5分钟内平均 Load。 -
load15
:15分钟内平均 Load。 -
下面是一些
Load
的参考信息 (Load
已经归一化处理,如果是 N 核 CPU,那么相应Load * N
):-
0.7 < Load < 1
:不错的状态,有新任务也可以及时处理; -
Load = 1
:即将有任务需要额外的等待时间才能被处理,需要引起关注; -
Load > 5
:任务需要等待时间很长,需要干预处理。 -
通常先看
load15
,如果很高,再看load1
和load5
,看是否有下降趋势,短时间内load1
大于 1,不用担心,如果长时间Load
较高,需要引起关注。
-
QPS
该实例所有 Node.js 进程每秒钟处理的 HTTP 请求数之和。
GC
-
gc_avg
:所有 Node.js 进程垃圾回收时间占比平均值。 -
gc_max
:每分钟内垃圾回收时间最多的 Node.js 进程的垃圾回收时间占比。
Apdex
Node.js 性能平台根据
HTTP
的响应时间
RT
来定义用户满意度(默认响应时间
100ms
):
-
satisfied
(满意):RT <= T
-
tolerating
(容忍):T < RT < 4 * T
-
frustrated
(失望):RT > 4 * T
-
计算方式:
satisfied + tolerating / 2
-
举例来说:
-
每分钟
satisfied
的HTTP
请求为60%
,tolerating
的为30%
,frustrated
的为10%
-
那么
Apdex = 0.6 + 0.3 / 2 = 0.75
-
Apdex detail
如上面描述的,根据响应时间分类的
HTTP
请求详细统计。
node进程数
该实例内的 Node.js 进程数统计。
磁盘
该实例的磁盘使用率。
进程监控数据各项指标什么含义
堆整体信息
-
rss
:该进程实际使用的内存,包括堆内内存和堆外内存。 -
heap_total
:总的堆内存。 -
heap_used
:实际使用的堆内存。
GC 信息
-
scavange_duration
:scavange
垃圾回收时间占比。 -
marksweep_duration
:marksweep
垃圾回收时间占比。
堆空间组成
堆上各个内存空间
code_space
,
lo_space
,
map_space
,
new_space
,
old_space
上的内存大小。
QPS 趋势
该进程每秒钟处理的 HTTP 请求数。
CPU 趋势
该进程在各个统计时段内的 CPU 使用率。
now
,
cpu_15
,
cpu_30
,
cpu_60
分别代表
1s
,
15s
,
30s
,
60s
内的 CPU 使用率。
Timer 趋势
该进程当前定时器数量。
-
所有超时值相同的
js
层面的定时器在该统计中数量为1。
libuv 句柄趋势
该进程的
libuv
句柄数统计,其中:
-
每个 TCP 连接占用一个句柄。
-
每个打开的文件占用一个句柄。
如何配置报警项
参见 用户指南-报警设置 。
Node.js 性能平台是如何进程故障诊断的
参见 用户指南-故障诊断 。
异常日志和性能日志有什么区别
-
异常日志是由应用写入的日志;
-
性能日志是由运行时在设置了
ENABLE_NODE_LOG=YES
(默认不写)后写入到NODE_LOG_DIR
所指定的目录(默认/tmp
),每天一个日志文件,例如文件名称为node-20171010.log
表示2017年10月10日的日志文件。
如何判断是否存在内存泄露
-
内存监控指标部分能看到随着时间内存持续增长。
如何判断是否存在 CPU 热点函数
-
CPU 持续飚高。