怎么获取Node性能监控指标?获取方法分享( 三 )


获取I/O指标 , 我们要了解一个linux命令 , 叫iostat , 如果没有安装 , 需要安装一下 , 我们看一下这个命令为啥能反应I/O指标
iostat -dx

怎么获取Node性能监控指标?获取方法分享

文章插图

属性说明
rrqm/s: 每秒进行 merge 的读操作数目 。 即 rmerge/s(每秒对该设备的读请求被合并次数 , 文件系统会对读取同块(block)的请求进行合并)wrqm/s: 每秒进行 merge 的写操作数目 。 即 wmerge/s(每秒对该设备的写请求被合并次数)r/s: 每秒完成的读 I/O 设备次数 。 即 rio/sw/s: 每秒完成的写 I/O 设备次数 。 即 wio/srsec/s: 每秒读扇区数 。 即 rsect/swsec/s: 每秒写扇区数 。 即 wsect/srkB/s: 每秒读K字节数 。 是 rsect/s 的一半 , 因为每扇区大小为512字节 。 wkB/s: 每秒写K字节数 。 是 wsect/s 的一半 。 avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区) 。 avgqu-sz: 平均I/O队列长度 。 await: 平均每次设备I/O操作的等待时间 (毫秒) 。 svctm: 平均每次设备I/O操作的处理时间 (毫秒) 。 %util: 一秒中有百分之多少的时间用于 I/O 操作 , 即被io消耗的cpu百分比我们只监控%util就行
    如果 %util 接近 100% , 说明产生的I/O请求太多 , I/O系统已经满负荷 , 该磁盘可能存在瓶颈 。
    如果 await 远大于 svctm , 说明 I/O 队列太长 , 应用得到的响应时间变慢 , 如果响应时间超过了用户可以容许的范围 , 这时可以考虑更换更快的磁盘 , 调整内核 elevator 算法 , 优化应用 , 或者升级 CPU 。
响应时间RT监控监控Nodejs的页面响应时间, 方案选自廖雪峰老师的博客文章 。
最近想监控一下Nodejs的性能 。 记录分析Log太麻烦 , 最简单的方式是记录每个HTTP请求的处理时间 , 直接在HTTP Response Header中返回 。
记录HTTP请求的时间很简单 , 就是收到请求记一个时间戳 , 响应请求的时候再记一个时间戳 , 两个时间戳之差就是处理时间 。
但是 , res.send()代码遍布各个js文件 , 总不能把每个URL处理函数都改一遍吧 。
正确的思路是用middleware实现 。 但是Nodejs没有任何拦截res.send()的方法 , 怎么破?
其实只要稍微转换一下思路 , 放弃传统的OOP方式 , 以函数对象看待res.send() , 我们就可以先保存原始的处理函数res.send , 再用自己的处理函数替换res.send:
app.use(function (req, res, next) { // 记录start time: var exec_start_at = Date.now(); // 保存原始处理函数: var _send = res.send; // 绑定我们自己的处理函数: res.send = function () { // 发送Header: res.set('X-Execution-Time', String(Date.now() - exec_start_at)); // 调用原始处理函数: return _send.apply(res, arguments); }; next();});只用了几行代码 , 就把时间戳搞定了 。
对于res.render()方法不需要处理 , 因为res.render()内部调用了res.send() 。
调用apply()函数时 , 传入res对象很重要 , 否则原始的处理函数的this指向undefined直接导致出错 。
实测首页响应时间9毫秒
监控吞吐量/每秒查询率 QPS名词解释:
一、QPS , 每秒查询QPS:Queries Per Second意思是“每秒查询率” , 是一台服务器每秒能够响应的查询次数 , 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准 。
互联网中 , 作为域名系统服务器的机器的性能经常用每秒查询率来衡量 。
二、TPS , 每秒事务TPS:是TransactionsPerSecond的缩写 , 也就是事务数/秒 。 它是软件测试结果的测量单位 。 一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程 。 客户机在发送请求时开始计时 , 收到服务器响应后结束计时 , 以此来计算使用的时间和完成的事务个数 。
QPS vs TPS:QPS基本类似于TPS , 但是不同的是 , 对于一个页面的一次访问 , 形成一个TPS;但一次页面请求 , 可能产生多次对服务器的请求 , 服务器对这些请求 , 就可计入“QPS”之中 。 如 , 访问一个页面会请求服务器2次 , 一次访问 , 产生一个“T” , 产生2个“Q” 。
三、RT , 响应时间响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间 。
响应时间RT(Response-time) , 是一个系统最重要的指标之一 , 它的数值大小直接反应了系统的快慢 。
四、并发数并发数是指系统同时能处理的请求数量 , 这个也是反应了系统的负载能力 。
五、吞吐量系统的吞吐量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联 。 单个request 对CPU消耗越高 , 外部系统接口、IO速度越慢 , 系统吞吐能力越低 , 反之越高 。

推荐阅读