matlab node._Node.js 运维问题(二)

9dafbad072ffe9e73615c1da937fd708.png

首先传送门,

zhukovaskychina/X-Nodejs​github.com

项目后期还会更新。

之前上一篇文章已经提到了我实现的一款node.js。

首先先简单的看下效果,

d0b79fc2596950d8f9dd3be89df212d4.png
这块是个标准的有cpu性能问题的代码。其核心在于斐波那契函数牛逼的栈堆的不断调用,耗CPU。
var 

我们用ab工具压测,在模仿alinode内置的在线抓取cpuprofiler,这个node.js在指定的日志目录自动生成了cpuprofile文件。

我们用chrome开发者工具打开这个生成的cpuprofile,

c0e5f01f1bad8544b52ea46c0e7db4c9.png

可以看到,这种递归的函数非常消耗栈堆。我们换一个方式显示,

63c96ca6902fc079c78c9becfedf1ffd.png

我们可以看到fib这个函数占据了将近60%的CPU性能,这个时候CPU负载高的原因就是这个fib函数导致的。而这个时候GC,垃圾回收器占用耗时性能很小。

这块的实现参考了hyj1991同学的v8-profiler-next或者v8-profiler-node8。

我们看下hyj1991同学的代码

Local

这段代码的当然是v8-profiler-next当中的,其核心在于调用了v8-profiler 当中的cpu_profiler对象的API。

cpuprofiler在停止cpu_profile的时候,会把相关的对象返回,也就是这个函数的入参。

Local

在这个代码区域里面,将获得整个cpuprofiler期间的所产生的的functionName,lineNumber,scriptId等等,将这些属性返回到profile_node对象当中,以逃逸对象返回。

最终生成的.cpuprofile是个json文件。在这个文件里面就是把cpuprofile的属性给展现出来。

不过在集成这块的代码的时候,node内部导出这个对象与js导出这个对象,是有差别的,这代码其他地方更多的是在给js对象做绑定属性的操作,这里就不表示了。

现在下面,要来看看hyj1991同学提到的cpu_profile的作用。其实这里给alinode打广告了(本人非阿里员工)。

hyj1991同学所编写的这个手册非常好,把node.js服务端这块的运维说明的非常清楚。

aliyun-node/Node.js-Troubleshooting-Guide

06799e4fbbb3d6467277c18e2dc32360.png

比方说这个例子。我就觉得非常好。

提到线上进程的监控运维,首先第一个我就要说的就是OneAPM的这套东西,感觉很不好。对于这个正则表达式,在代码里面嵌入所谓的探针或者SDK,最多充其量知道这个URL有问题。开发同学怎么可能知道是某个函数有问题?靠猜么?

1756d96392a0cf170b2a1100d0a0939c.png
扯淡的OneAPM

我觉得alinode在这块做的非常好,这个例子非常有说服力。

我们看看OneAPM的这里面所谓的事务跟踪,能保证OneAPM的SDK不存在性能问题么?

同样的,对于这类问题OOM,某个进程挂了,怎么能知道这个进程挂了的原因么?

hyj1991:Node 案发现场揭秘 —— Coredump 还原线上异常​zhuanlan.zhihu.com
41907c9889688cc8b9772f9079c2cb4a.png

这个就比市面上的其他APM要强大很多。

#############################################################################################

后面继续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值