来源: http://www.jianshu.com/p/16e3813ae620 很久没更新了,记一篇流水账,说说我使用alinode的那些事儿。
Alinode简介
alinode,是一套基于社区 Node 改进的运行时环境和服务平台。在社区的基础上我们内建了强大的支持功能,帮助开发者迅速洞见性能细节,快速定位疑难杂症,直探问题根源。
官网网址:http://alinode.aliyun.com/
安装
alinode提供了两种部署方式: 1.自助式部署 。 2.交互性部署。
本人选择的是交互性部署。过程当中只需要执行两条命令
wget -q https://raw.githubusercontent.com/aliyun-node/alinode-all-in-one/master/alinode_all.sh
bash -i alinode_all.sh // 可能需要sudo权限
安装过程当中,有两点让我感到比较意外,1. 竟然会问我是否使用阿里云的服务器(如果不是阿里云的服务器,不知道是否会容易遇到问题?) 2. 发现分配给我的app id 才800多,感觉目前使用的人还不多。
回头看看自助式部署的文档。
主要介绍了如何安装 tnvm
, AgentX
,根据命名方法,推测tnvm功能作用约等于nvm,负责alinode的版本更新。
回头把重点放在 AgentX 模块,通过npm查找到对应模块的一些介绍。
AgentX是alinode团队开发的agent命令程序,用于协助alinode的性能数据上报和问题诊断。
项目地址:https://github.com/aliyun-node/agentx
大概浏览了一下代码,agentx 大概的作用是,启动了一个websocket服务器,服务器会带着app id 和 key 等信息到监控服务器上面注册,注册成功后,收集alinode产生的日志文件汇报到监控服务器并且暴露一些执行命令的接口,交给监控服务器来推送执行。
##监控
nohup agentx ~/yourconfig.json & // 启动AgentX
export ENABLE_NODE_LOG=YES // 当您需要 alinode 的内核级监控时,请于启动进程前,添加如下两个环境变量
export NODE_LOG_DIR=/tmp/
node app.js //启动你的node.js 应用。
alinode进程监控
堆整体信息是描述V8堆的大致信息的。heap_limit是堆内存的上限大小。heap_total是当前堆申请到的大小。heap_used是当前实际使用到的大小。其大小关系为heap_limit > heap_total > heap_used。
V8中,堆被开辟为多个空间,每个空间有自己的GC回收算法。其中new_space是新生代,code_space存放编译后的代码,lo_space存放大对象。除了new_space外,其余空间均属于老生代。
GC信息是当前一分钟内的GC占比图。last_min指过去的1分钟。gc_time_during_last_min是指在这一分钟内用在GC上的时间占比。scavange_durition是指作用在新生代上的GC占比,marksweep_durition是指作用在老生代上的GC占比
很遗憾,qps趋势并没有说明是如何定义的?
timer趋势比较有意思,定时器是在node.js经常使用的,同时也是产生性能问题的,监听个数有确实有利于发现系统问题。
##Node profile
记得在深jsconf中,朴灵曾经为此进行分析,开发者能通过Node profile 能够轻松地看到项目代码在执行的过程中,代码片段所花费的时间和优化情况。有一点可惜的是该项目不是开源的。
项目地址: http://profiler.alinode.aliyun.com/
alinode中提供了方便的接口查看node profile
在进程界面中,选择alinode 的进程,并选择 take cpu profile
约3分钟后,将会生成node profile 文件,上传该文件可以得到分析报告
##总结
经过短暂的alnode使用,初步的印象alinode是一个 常规监控 + node 特色监控的监控服务,其中对node.js在运行当中的细节描述(例如gc,内存占用,libuv handles)尤为出色。
待改进地方:
- 界面设计方面还需要努力,尤其图表,相对其他监控服务来说,还是比较粗糙,估计alinode团队当前,把精力放在基础建设上面吧?相信要做,肯定能做好的。
- 当我们启动的时候带上
ENABLE_NODE_LOG=YES
才能拥有内核级的监控,既然alinode是这样设计,估计在做log的过程中对内核有一定消耗,如果不能启动内核监控,相对于其他监控服务,alinode优势不大,如果能变成不重启就能实现或者优化做log的时候性能没有受到太大影响,应该才是最好的方式。 - 对于v8堆,栈,gc情况,均详细显示在统计图表当中,然而,很多开发者对于v8堆,栈,gc等性能指标相对于平均负载,cpu负载,内存占用等常规监控项目而言,并不是那么熟悉,例如,当我的libuv handles 占用很高,我该如何调试?一般产生问题的原因有哪些?估计alinode团队也意识到这个问题,开设了团队博客进行科普,文章质量感觉不错。 地址:http://alinode.aliyun.com/blog
最后,希望alinode越办越好。