nodejs真的是单线程吗?

转载:http://liyangready.github.io/2015/08/14/nodejs真的是单线程吗?/

性能调优

说完了Node.js调试方面需要掌握的基本技能,下面说一下性能调优相关的技巧。 
Node.js相比Java、PHP这些老牌语言,基础设施还是有所欠缺的:比如性能分析和监控工具等,加上它的单线程运行特性,在大型应用中,很容易让系统的CPU、内存或者事件队列太满达到瓶颈,从而导致程序崩溃。一旦发现程序警报CPU负载过高,或者内存飙高时,我们该如何排查Node.js代码存在的问题呢?首先先分析一下问题。

内存持高存在的因素:

  • 缓存,很多人在code的时候把内存当缓存用,e.g. 使用js对象储存用户的session信息
  • 闭包,作用域长时间不能被释放掉
  • 生产者和消费者存在速度延迟,e.g. 数据库忙不过来,query队列堆积

CPU负载过高可能因素:

  • 垃圾回收频率过高、量太大,这一般是因为内存或者缓存暴涨导致的
  • 密集型的长循环计算,e.g. 大量遍历文件夹、大量计算等
  • 客户端并发数太大,e.g. 利用node作为socket服务端时,客户端连接数太大时,心跳处理也属于一次网络io,最终libuv转换成事件,严重影响业务消息发送

这些问题都是让人头疼的,一个项目几十上百个文件,收到这些警报如果没有经验,根本无从下手排查。

最直接的手段就是分析 GC 日志,因为程序的一举一动都会反馈到 GC 上,而上述问题也会一一指向 GC,如: 
内存暴涨,尤其是 Old Space 内存的暴涨,会直接导致 GC 的次数和时间增长 
缓存增加,导致 GC 的时间增加,无用遍历过多 
密集型计算,导致 GC Now Space次数增加

ps:阿里出了一套调优工具alinode,看起来比较不错,感兴趣的童鞋可以试试,顺便反馈一下情况。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值